<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<title>AMBHAS: /home/tomer/svn/ambhas/ambhas/csglm.py Source File</title>

<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
  $(document).ready(initResizable);
</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
  $(document).ready(function() { searchBox.OnSelectItem(0); });
</script>

</head>
<body>
<div id="top"><!-- do not remove this div! -->


<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  
  
  <td style="padding-left: 0.5em;">
   <div id="projectname">AMBHAS
   
   </div>
   
  </td>
  
  
  
   
   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
        <span class="left">
          <img id="MSearchSelect" src="search/mag_sel.png"
               onmouseover="return searchBox.OnSearchSelectShow()"
               onmouseout="return searchBox.OnSearchSelectHide()"
               alt=""/>
          <input type="text" id="MSearchField" value="Search" accesskey="S"
               onfocus="searchBox.OnSearchFieldFocus(true)" 
               onblur="searchBox.OnSearchFieldFocus(false)" 
               onkeyup="searchBox.OnSearchFieldChange(event)"/>
          </span><span class="right">
            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
          </span>
        </div>
</td>
   
  
 </tr>
 </tbody>
</table>
</div>

<!-- Generated by Doxygen 1.7.6.1 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
</div>
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
  initNavTree('csglm_8py.html','');
</script>
<div id="doc-content">
<div class="header">
  <div class="headertitle">
<div class="title">csglm.py</div>  </div>
</div><!--header-->
<div class="contents">
<a href="csglm_8py.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a><a class="code" href="namespaceambhas_1_1csglm.html">00001</a> <span class="comment"># -*- coding: utf-8 -*-</span>
<a name="l00002"></a>00002 <span class="stringliteral">&quot;&quot;&quot;</span>
<a name="l00003"></a>00003 <span class="stringliteral">Created on Thu Dec 29 19:58:19 2011</span>
<a name="l00004"></a>00004 <span class="stringliteral"></span>
<a name="l00005"></a>00005 <span class="stringliteral">@author: Sat Kumar Tomer</span>
<a name="l00006"></a>00006 <span class="stringliteral">@website: www.ambhas.com</span>
<a name="l00007"></a>00007 <span class="stringliteral">@email: satkumartomer@gmail.com</span>
<a name="l00008"></a>00008 <span class="stringliteral"></span>
<a name="l00009"></a>00009 <span class="stringliteral">Copuled Surface-Ground water Lumped hydrological Model</span>
<a name="l00010"></a>00010 <span class="stringliteral">&quot;&quot;&quot;</span>
<a name="l00011"></a>00011 
<a name="l00012"></a>00012 <span class="keyword">from</span> __future__ <span class="keyword">import</span> division
<a name="l00013"></a>00013 <span class="comment"># import required modules</span>
<a name="l00014"></a>00014 <span class="keyword">import</span> numpy <span class="keyword">as</span> np
<a name="l00015"></a>00015 <span class="keyword">import</span> xlrd, xlwt
<a name="l00016"></a>00016 <span class="keyword">import</span> os
<a name="l00017"></a>00017 <span class="keyword">import</span> gdal
<a name="l00018"></a>00018 <span class="keyword">from</span> gdalconst <span class="keyword">import</span> *
<a name="l00019"></a>00019 <span class="keyword">from</span> scipy.interpolate <span class="keyword">import</span> Rbf
<a name="l00020"></a>00020 <span class="keyword">from</span> Scientific.IO <span class="keyword">import</span> NetCDF <span class="keyword">as</span> nc
<a name="l00021"></a>00021 <span class="keyword">import</span> datetime
<a name="l00022"></a>00022 np.seterr(all=<span class="stringliteral">&#39;raise&#39;</span>)
<a name="l00023"></a>00023 
<a name="l00024"></a><a class="code" href="classambhas_1_1csglm_1_1CSGLM.html">00024</a> <span class="keyword">class </span><a class="code" href="classambhas_1_1csglm_1_1CSGLM.html">CSGLM</a>:
<a name="l00025"></a>00025     <span class="stringliteral">&quot;&quot;&quot;</span>
<a name="l00026"></a>00026 <span class="stringliteral">    This is the main class of the CGLSM.</span>
<a name="l00027"></a>00027 <span class="stringliteral">    This will read the input data,</span>
<a name="l00028"></a>00028 <span class="stringliteral">    do the processing</span>
<a name="l00029"></a>00029 <span class="stringliteral">    and then write the output files</span>
<a name="l00030"></a>00030 <span class="stringliteral">    </span>
<a name="l00031"></a>00031 <span class="stringliteral">    &quot;&quot;&quot;</span>
<a name="l00032"></a>00032     
<a name="l00033"></a>00033     
<a name="l00034"></a><a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#aa6705a6ee1bd06b73f7a596acec9b26e">00034</a>     <span class="keyword">def </span><a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#aa6705a6ee1bd06b73f7a596acec9b26e">__init__</a>(self, input_file):
<a name="l00035"></a>00035         <span class="stringliteral">&quot;&quot;&quot;</span>
<a name="l00036"></a>00036 <span class="stringliteral">        Input:</span>
<a name="l00037"></a>00037 <span class="stringliteral">            input_file: the file which contains all the information</span>
<a name="l00038"></a><a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a26e98f8f8efad844034f0ee1ecaaea16">00038</a> <span class="stringliteral">            including forcing and parameters.</span>
<a name="l00039"></a><a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a964b143e81cb0e3b7dca89db3770f5af">00039</a> <span class="stringliteral">        &quot;&quot;&quot;</span>        
<a name="l00040"></a>00040         
<a name="l00041"></a>00041         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a26e98f8f8efad844034f0ee1ecaaea16">input_file</a> = input_file
<a name="l00042"></a>00042         
<a name="l00043"></a>00043         <span class="comment"># read the input data</span>
<a name="l00044"></a>00044         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#acaa1e95d6843a042d3b79d43ac53c2f9">_read_input</a>()
<a name="l00045"></a>00045         
<a name="l00046"></a>00046         <span class="comment">################ run the model ########################</span>
<a name="l00047"></a>00047         max_t = int(self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#ab95041922682d34a8e39a72c52876422">final_time</a>/self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a4dda58804e5dbbbc9481b177090863d5">dt</a>)
<a name="l00048"></a>00048         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#afb823e4e81c242a01d9eb8dd72d9d71b" title="run the model ########################">max_t</a> = max_t
<a name="l00049"></a>00049         <span class="comment"># initialize required variables</span>
<a name="l00050"></a>00050         <span class="comment"># the length of state variables (i.e. soil moisture and gw level) is</span>
<a name="l00051"></a>00051         <span class="comment"># one more than the timesteps</span>
<a name="l00052"></a>00052         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#acd5dcc28478c407c7657e51117566629">actual_evap</a> = np.empty(max_t)
<a name="l00053"></a>00053         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a9c0472e31b5748e4a9e719a8b1539440">actual_trans</a> = np.empty(max_t)    
<a name="l00054"></a>00054         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a03e7b35599db36f25f04205462504f70">E_In</a> = np.empty(max_t)    
<a name="l00055"></a>00055         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a9836fdfee8b087ba3cbc882179db120e">horton_runoff</a> = np.empty(max_t)    
<a name="l00056"></a>00056         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a69ce28df534af85dfef7981b90b2dcad">recharge</a> = np.empty(max_t)    
<a name="l00057"></a>00057         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#acc1b1f528d44d2163dbacd614e13fc20">runoff</a> = np.empty(max_t)    
<a name="l00058"></a>00058         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a2942f4c699f86925e90f81911b0c9f23">gw_level</a> = np.empty(max_t+1) 
<a name="l00059"></a>00059         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a2942f4c699f86925e90f81911b0c9f23">gw_level</a>[0] = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a3cde204ba743415ceb9618a969918dc1">initial_gwl</a>
<a name="l00060"></a>00060         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a08fb52fecd1da4174c3396e531f3285a">sm</a> = np.empty((self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#ab4ad7e2cebfbfd4c6ede9f33a659b269">no_layer</a>,max_t+1))
<a name="l00061"></a>00061         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a08fb52fecd1da4174c3396e531f3285a">sm</a>[:,0] = self.initial_sm.flatten()
<a name="l00062"></a>00062         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a5b4eab358263189999e5f6c051a3c5cb">surface_storage</a> = np.zeros(max_t+1)
<a name="l00063"></a>00063         
<a name="l00064"></a>00064         <span class="keywordflow">for</span> t <span class="keywordflow">in</span> range(max_t):
<a name="l00065"></a>00065             self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a964b143e81cb0e3b7dca89db3770f5af">t</a> = t
<a name="l00066"></a>00066               
<a name="l00067"></a>00067             <span class="comment"># get forcing data at current time step        </span>
<a name="l00068"></a>00068             self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a765ca9a0abfebbbabc22aa0927e73871">_get_forcing</a>()
<a name="l00069"></a>00069             
<a name="l00070"></a>00070             <span class="comment"># call the interception module</span>
<a name="l00071"></a>00071             self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a7fa6cfab6a84962598907a5070710427">_interception_fun</a>()
<a name="l00072"></a>00072             
<a name="l00073"></a>00073             <span class="comment"># call the runoff module</span>
<a name="l00074"></a>00074             self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a9c8f34d27b94bc9cb9593b88e5efd231">_runoff_fun</a>()
<a name="l00075"></a>00075             
<a name="l00076"></a>00076             <span class="comment"># call the soil module</span>
<a name="l00077"></a>00077             self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#ac7634d5a061dac47c1a62815f60e3e38">_soil_fun</a>()
<a name="l00078"></a>00078             
<a name="l00079"></a>00079             <span class="comment"># call the surface storage module</span>
<a name="l00080"></a>00080             self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a97a78c488d82cda1d645689244340abf">_surface_storage_fun</a>()
<a name="l00081"></a>00081             
<a name="l00082"></a>00082             <span class="comment"># call the goundwater module</span>
<a name="l00083"></a>00083             self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a8837eca7b507d53063ba4dbbbf5e9e37">_gw_fun</a>()
<a name="l00084"></a>00084         
<a name="l00085"></a>00085         <span class="comment"># write the output</span>
<a name="l00086"></a>00086         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a677507d1d871baa7c7eafa5680f6de80">_write_output</a>()
<a name="l00087"></a>00087 
<a name="l00088"></a>00088     <span class="keyword">def </span>_read_input(self):
<a name="l00089"></a>00089         <span class="stringliteral">&quot;&quot;&quot;</span>
<a name="l00090"></a>00090 <span class="stringliteral">        This checks if all the required input sheets are present in the xls file,</span>
<a name="l00091"></a>00091 <span class="stringliteral">        read the data from input file, which can be used later in other functions</span>
<a name="l00092"></a>00092 <span class="stringliteral">        &quot;&quot;&quot;</span>
<a name="l00093"></a>00093     
<a name="l00094"></a>00094         <span class="comment"># list of required files in the input directory</span>
<a name="l00095"></a>00095         input_sheets = [<span class="stringliteral">&#39;ind&#39;</span>, <span class="stringliteral">&#39;forcing&#39;</span>, <span class="stringliteral">&#39;initial_condition&#39;</span>, <span class="stringliteral">&#39;gw_par&#39;</span>,
<a name="l00096"></a>00096                        <span class="stringliteral">&#39;runoff_par&#39;</span>, <span class="stringliteral">&#39;units&#39;</span>, <span class="stringliteral">&#39;root_info&#39;</span>, <span class="stringliteral">&#39;temporal_info&#39;</span>,
<a name="l00097"></a>00097                        <span class="stringliteral">&#39;spatial_info&#39;</span>, <span class="stringliteral">&#39;ET_par&#39;</span>, <span class="stringliteral">&#39;soil_hyd_par&#39;</span>, <span class="stringliteral">&#39;output_par&#39;</span>]
<a name="l00098"></a>00098         
<a name="l00099"></a>00099         <span class="comment"># check if all the required sheets are present or not</span>
<a name="l00100"></a>00100         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a253f834ba6d542e37a68a6af4d13914d">_check_sheets</a>(input_sheets, self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a26e98f8f8efad844034f0ee1ecaaea16">input_file</a>)
<a name="l00101"></a>00101         
<a name="l00102"></a>00102         <span class="comment"># read the legend</span>
<a name="l00103"></a>00103         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a4d12504bd35aa6aca22a9891ba8deb2e">_read_ind</a>()
<a name="l00104"></a>00104         
<a name="l00105"></a>00105         <span class="comment"># read the spatial data</span>
<a name="l00106"></a>00106         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#acfc63e5ac0a4bd010838cdb7c2598e4e">_read_spatial</a>()
<a name="l00107"></a>00107         
<a name="l00108"></a>00108         <span class="comment"># read the temporal data</span>
<a name="l00109"></a>00109         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a6240a1ec3dad5d156c974a91d6fa2f61">_read_temporal</a>()
<a name="l00110"></a>00110 
<a name="l00111"></a>00111         <span class="comment"># read the root distribution data</span>
<a name="l00112"></a>00112         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#aa64794f9381592a2bb7dcf54286fae7a">_read_root_distribution</a>()
<a name="l00113"></a>00113         
<a name="l00114"></a>00114         <span class="comment"># read the units </span>
<a name="l00115"></a>00115         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a9ea9133b892f848916c52de30ab7d003">_read_units</a>()
<a name="l00116"></a>00116         
<a name="l00117"></a>00117         <span class="comment"># read the initial condition</span>
<a name="l00118"></a>00118         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a60b32e035621209d0296955c1f88ae44">_read_initial_condition</a>()
<a name="l00119"></a>00119         
<a name="l00120"></a>00120         <span class="comment"># read the soil hydraulic properties data</span>
<a name="l00121"></a>00121         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a924bc8b35dfc25acb09a2c9f4cf9df6f">_read_shp</a>()
<a name="l00122"></a>00122         
<a name="l00123"></a>00123         <span class="comment"># read the parameters related to runoff</span>
<a name="l00124"></a>00124         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a5c3b03a55b5ce124fff43f24f2466c5a">_read_runoff_par</a>()
<a name="l00125"></a>00125         
<a name="l00126"></a>00126         <span class="comment"># read the parameters related to surface storage</span>
<a name="l00127"></a>00127         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#afaa042bfef19ff3fc8be321f4bbcf80b">_surface_storage_par</a>()
<a name="l00128"></a>00128         
<a name="l00129"></a>00129         <span class="comment"># read the groundwaer parameters data</span>
<a name="l00130"></a>00130         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#ad4df632da90e1c18f95e0f9ef3af2bb5">_read_gw_par</a>()
<a name="l00131"></a>00131         
<a name="l00132"></a>00132         <span class="comment"># read the ET parameter data</span>
<a name="l00133"></a>00133         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a3a26290eff06d5414dad9f00e8ecb4fd">_read_ET_par</a>()
<a name="l00134"></a>00134         
<a name="l00135"></a>00135         <span class="comment"># read the forcing infomation</span>
<a name="l00136"></a>00136         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a0ce6bb4363b44e759b6e85868ec7826b">_read_forcing</a>()
<a name="l00137"></a>00137         
<a name="l00138"></a>00138         <span class="comment"># read the outfile name</span>
<a name="l00139"></a>00139         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#ae67245f3d9b1634a7d3a9b1b42772c73">_read_ofile_name</a>()
<a name="l00140"></a>00140         
<a name="l00141"></a>00141         <span class="comment"># print the reading status</span>
<a name="l00142"></a>00142         output_message = <span class="stringliteral">&#39;Input data reading completed sucessfully&#39;</span>
<a name="l00143"></a>00143         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#afe1a6e68e8787346dc7a6db2e5aa3e4f">_colored_output</a>(output_message, 32)
<a name="l00144"></a>00144        
<a name="l00145"></a>00145     <span class="keyword">def </span>_check_sheets(self, check_sheets, check_file):
<a name="l00146"></a>00146         <span class="stringliteral">&quot;&quot;&quot;</span>
<a name="l00147"></a>00147 <span class="stringliteral">        This functions check if all the sheets needed to model are present  </span>
<a name="l00148"></a>00148 <span class="stringliteral">        in check_file</span>
<a name="l00149"></a>00149 <span class="stringliteral">        </span>
<a name="l00150"></a>00150 <span class="stringliteral">        &quot;&quot;&quot;</span>
<a name="l00151"></a>00151         <span class="comment"># open the xls file and get its sheets</span>
<a name="l00152"></a>00152         foo = xlrd.open_workbook(check_file)
<a name="l00153"></a>00153         check_sheet_names = foo.sheet_names()
<a name="l00154"></a>00154         
<a name="l00155"></a>00155         <span class="keywordflow">for</span> check_sheet_names <span class="keywordflow">in</span> check_file:
<a name="l00156"></a>00156             <span class="keywordflow">if</span> check_sheet_names <span class="keywordflow">not</span> <span class="keywordflow">in</span> check_file:
<a name="l00157"></a>00157                 output_message = check_sheet_names + <span class="stringliteral">&#39; is missing&#39;</span>
<a name="l00158"></a>00158                 self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#afe1a6e68e8787346dc7a6db2e5aa3e4f">_colored_output</a>(output_message,31)
<a name="l00159"></a>00159 
<a name="l00160"></a>00160     <span class="keyword">def </span>_read_ind(self):
<a name="l00161"></a>00161         <span class="stringliteral">&quot;&quot;&quot;</span>
<a name="l00162"></a>00162 <span class="stringliteral">        Read the ind sheet</span>
<a name="l00163"></a>00163 <span class="stringliteral">        legend stores the information about the indices of other properties,</span>
<a name="l00164"></a><a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#acab9e9c33e60151482d275c275261e19">00164</a> <span class="stringliteral">        which would be used by all other properties reading functions</span>
<a name="l00165"></a>00165 <span class="stringliteral">        &quot;&quot;&quot;</span>
<a name="l00166"></a>00166         book = xlrd.open_workbook(self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a26e98f8f8efad844034f0ee1ecaaea16">input_file</a>)
<a name="l00167"></a>00167         sheet = book.sheet_by_name(<span class="stringliteral">&#39;ind&#39;</span>)
<a name="l00168"></a>00168         <span class="comment"># dont read the first line of the xls file</span>
<a name="l00169"></a>00169         ind = {}
<a name="l00170"></a>00170         <span class="keywordflow">for</span> i <span class="keywordflow">in</span> range(sheet.nrows-1):
<a name="l00171"></a>00171             ind[str(sheet.cell_value(i+1,0))] = int(sheet.cell_value(i+1,1))
<a name="l00172"></a>00172                 
<a name="l00173"></a>00173         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#acab9e9c33e60151482d275c275261e19">ind</a> = ind
<a name="l00174"></a>00174 
<a name="l00175"></a>00175     <span class="keyword">def </span>_read_spatial(self):
<a name="l00176"></a>00176         <span class="stringliteral">&quot;&quot;&quot;</span>
<a name="l00177"></a>00177 <span class="stringliteral">        Read the spatial info</span>
<a name="l00178"></a><a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a0da4da8f8723eb5fc459ffc274505d4e">00178</a> <span class="stringliteral">        &quot;&quot;&quot;</span>
<a name="l00179"></a>00179         book = xlrd.open_workbook(self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a26e98f8f8efad844034f0ee1ecaaea16">input_file</a>)
<a name="l00180"></a>00180         sheet = book.sheet_by_name(<span class="stringliteral">&#39;spatial_info&#39;</span>)
<a name="l00181"></a>00181         <span class="comment"># get the row number from the ind</span>
<a name="l00182"></a>00182         j = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#acab9e9c33e60151482d275c275261e19">ind</a>[<span class="stringliteral">&#39;spatial_info&#39;</span>]
<a name="l00183"></a>00183         no_layer = int(sheet.cell_value(j,1))
<a name="l00184"></a>00184         z = sheet.row_values(j,2)
<a name="l00185"></a>00185         <span class="keywordflow">if</span> no_layer != len(z):
<a name="l00186"></a>00186             <span class="keywordflow">raise</span> ValueError(<span class="stringliteral">&#39;The length of the thickness_layers\</span>
<a name="l00187"></a>00187 <span class="stringliteral">            should be equal to the No_layer&#39;</span>)
<a name="l00188"></a>00188         
<a name="l00189"></a>00189         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#ab4ad7e2cebfbfd4c6ede9f33a659b269">no_layer</a> = no_layer
<a name="l00190"></a>00190         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a0da4da8f8723eb5fc459ffc274505d4e">z</a> = z
<a name="l00191"></a>00191         <span class="comment">#mid depth of the layers</span>
<a name="l00192"></a>00192         depth = np.zeros(no_layer+1)
<a name="l00193"></a>00193         depth[1:] = np.cumsum(z)
<a name="l00194"></a>00194         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a510e51fb8e07c922d377216e67e467b1">mid_z</a> = 0.5*(depth[1:]+depth[:-1])
<a name="l00195"></a>00195         
<a name="l00196"></a>00196     
<a name="l00197"></a>00197     <span class="keyword">def </span>_read_temporal(self):
<a name="l00198"></a>00198         <span class="stringliteral">&quot;&quot;&quot;</span>
<a name="l00199"></a><a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#ab95041922682d34a8e39a72c52876422">00199</a> <span class="stringliteral">        Read the temporal info</span>
<a name="l00200"></a>00200 <span class="stringliteral">        &quot;&quot;&quot;</span>
<a name="l00201"></a>00201         book = xlrd.open_workbook(self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a26e98f8f8efad844034f0ee1ecaaea16">input_file</a>)
<a name="l00202"></a>00202         sheet = book.sheet_by_name(<span class="stringliteral">&#39;temporal_info&#39;</span>)
<a name="l00203"></a>00203         <span class="comment">#get the row number from the ind</span>
<a name="l00204"></a>00204         j = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#acab9e9c33e60151482d275c275261e19">ind</a>[<span class="stringliteral">&#39;temporal_info&#39;</span>]
<a name="l00205"></a>00205         dt = sheet.cell_value(j,1)
<a name="l00206"></a>00206         final_time = sheet.cell_value(j,2)
<a name="l00207"></a>00207         
<a name="l00208"></a>00208         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a4dda58804e5dbbbc9481b177090863d5">dt</a> = dt
<a name="l00209"></a>00209         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#ab95041922682d34a8e39a72c52876422">final_time</a> = final_time
<a name="l00210"></a>00210     
<a name="l00211"></a>00211     <span class="keyword">def </span>_read_root_distribution(self):
<a name="l00212"></a>00212         <span class="stringliteral">&quot;&quot;&quot;</span>
<a name="l00213"></a><a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a1d0dd12d2a02beb616d482966b338ad0">00213</a> <span class="stringliteral">        read the root distribution factors</span>
<a name="l00214"></a>00214 <span class="stringliteral">        &quot;&quot;&quot;</span>
<a name="l00215"></a>00215         book = xlrd.open_workbook(self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a26e98f8f8efad844034f0ee1ecaaea16">input_file</a>)
<a name="l00216"></a>00216         sheet = book.sheet_by_name(<span class="stringliteral">&#39;root_info&#39;</span>)
<a name="l00217"></a>00217         <span class="comment">#get the row number from the ind</span>
<a name="l00218"></a>00218         j = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#acab9e9c33e60151482d275c275261e19">ind</a>[<span class="stringliteral">&#39;root_info&#39;</span>]
<a name="l00219"></a>00219         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a830f8dd4a142702f15ddea9b0f7feccd">ndvi_max</a> = sheet.cell_value(j,1)
<a name="l00220"></a>00220         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#ad94433328bd20e7a101c96fcae78084c">ndvi_min</a> = sheet.cell_value(j,2)
<a name="l00221"></a>00221         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#aff2425a3186a6de8e19bc79b88f2fdb7">fapar_max</a> = sheet.cell_value(j,3)
<a name="l00222"></a>00222         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a9ce1629483176cda7978d627e1e9a0ed">lai_max</a> = sheet.cell_value(j,4)
<a name="l00223"></a>00223         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a1d0dd12d2a02beb616d482966b338ad0">Rd_max</a> = sheet.cell_value(j,5)
<a name="l00224"></a>00224         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#aa631b6b71016719fedf230aec1edc439">Lrd</a> = sheet.cell_value(j,6)
<a name="l00225"></a>00225   
<a name="l00226"></a>00226             
<a name="l00227"></a>00227     <span class="keyword">def </span>_read_units(self):
<a name="l00228"></a>00228         <span class="stringliteral">&quot;&quot;&quot;</span>
<a name="l00229"></a><a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a4e1c4a48dbe0e22a4762d14e1374f4e5">00229</a> <span class="stringliteral">        read the units of the forcing data</span>
<a name="l00230"></a>00230 <span class="stringliteral">        &quot;&quot;&quot;</span>
<a name="l00231"></a>00231         book = xlrd.open_workbook(self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a26e98f8f8efad844034f0ee1ecaaea16">input_file</a>)
<a name="l00232"></a>00232         sheet = book.sheet_by_name(<span class="stringliteral">&#39;units&#39;</span>)
<a name="l00233"></a>00233         <span class="comment">#get the row number from the ind</span>
<a name="l00234"></a>00234         j = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#acab9e9c33e60151482d275c275261e19">ind</a>[<span class="stringliteral">&#39;units&#39;</span>]
<a name="l00235"></a>00235         forcing_units = {}
<a name="l00236"></a>00236         <span class="keywordflow">for</span> i <span class="keywordflow">in</span> range(sheet.ncols-1):
<a name="l00237"></a>00237             forcing_units[str(sheet.cell_value(0,i+1))] = str(sheet.cell_value(j,i+1))
<a name="l00238"></a>00238         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a4e1c4a48dbe0e22a4762d14e1374f4e5">forcing_units</a> = forcing_units
<a name="l00239"></a>00239     
<a name="l00240"></a>00240     <span class="keyword">def </span>_read_initial_condition(self):
<a name="l00241"></a>00241         <span class="stringliteral">&quot;&quot;&quot;</span>
<a name="l00242"></a><a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a96e13e605d67490cb6c3d5199859c25f">00242</a> <span class="stringliteral">        read initial condition</span>
<a name="l00243"></a>00243 <span class="stringliteral">        &quot;&quot;&quot;</span>
<a name="l00244"></a>00244         <span class="comment">#get the row number from the ind</span>
<a name="l00245"></a>00245         j = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#acab9e9c33e60151482d275c275261e19">ind</a>[<span class="stringliteral">&#39;initial_condition&#39;</span>]
<a name="l00246"></a>00246         
<a name="l00247"></a>00247         book = xlrd.open_workbook(self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a26e98f8f8efad844034f0ee1ecaaea16">input_file</a>)
<a name="l00248"></a>00248         sheet = book.sheet_by_name(<span class="stringliteral">&#39;initial_condition&#39;</span>)
<a name="l00249"></a>00249         theta_0 = sheet.row_values(j,2)
<a name="l00250"></a>00250         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a3cde204ba743415ceb9618a969918dc1">initial_gwl</a> = sheet.cell_value(j,1)
<a name="l00251"></a>00251         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a96e13e605d67490cb6c3d5199859c25f">initial_sm</a> = np.array(theta_0)
<a name="l00252"></a>00252         
<a name="l00253"></a>00253         <span class="keywordflow">try</span>:
<a name="l00254"></a>00254             self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a96e13e605d67490cb6c3d5199859c25f">initial_sm</a>.shape = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#ab4ad7e2cebfbfd4c6ede9f33a659b269">no_layer</a>,1
<a name="l00255"></a>00255         <span class="keywordflow">except</span>:
<a name="l00256"></a>00256             <span class="keywordflow">raise</span> ValueError(<span class="stringliteral">&#39;The length of the theta_0 should be \</span>
<a name="l00257"></a>00257 <span class="stringliteral">            equal to the no_layer&#39;</span>)
<a name="l00258"></a>00258     
<a name="l00259"></a>00259     <span class="keyword">def </span>_read_shp(self):
<a name="l00260"></a>00260         <span class="stringliteral">&quot;&quot;&quot;</span>
<a name="l00261"></a><a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a50adabdfa73c08c5ba2d754ea71b6035">00261</a> <span class="stringliteral">        read the soil hydraulic parameters</span>
<a name="l00262"></a>00262 <span class="stringliteral">        &quot;&quot;&quot;</span>
<a name="l00263"></a>00263         <span class="comment">#get the row number from the ind</span>
<a name="l00264"></a>00264         j = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#acab9e9c33e60151482d275c275261e19">ind</a>[<span class="stringliteral">&#39;soil_hyd_par&#39;</span>]
<a name="l00265"></a>00265         
<a name="l00266"></a>00266         book = xlrd.open_workbook(self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a26e98f8f8efad844034f0ee1ecaaea16">input_file</a>)
<a name="l00267"></a>00267         sheet = book.sheet_by_name(<span class="stringliteral">&#39;soil_hyd_par&#39;</span>)
<a name="l00268"></a>00268         soil_par = {}
<a name="l00269"></a>00269         soil_par[<span class="stringliteral">&#39;qr&#39;</span>] = sheet.cell_value(j,1)
<a name="l00270"></a>00270         soil_par[<span class="stringliteral">&#39;f&#39;</span>] = sheet.cell_value(j,2)
<a name="l00271"></a>00271         soil_par[<span class="stringliteral">&#39;a&#39;</span>] = sheet.cell_value(j,3)
<a name="l00272"></a>00272         soil_par[<span class="stringliteral">&#39;n&#39;</span>] = sheet.cell_value(j,4)
<a name="l00273"></a>00273         soil_par[<span class="stringliteral">&#39;Ks&#39;</span>] = sheet.cell_value(j,5)
<a name="l00274"></a>00274         soil_par[<span class="stringliteral">&#39;l&#39;</span>] = sheet.cell_value(j,6)
<a name="l00275"></a>00275         <span class="comment">#soil_par[&#39;evap_wp&#39;] = sheet.cell_value(j,7)</span>
<a name="l00276"></a>00276         <span class="comment">#soil_par[&#39;evap_fc&#39;] = sheet.cell_value(j,8)</span>
<a name="l00277"></a>00277         soil_par[<span class="stringliteral">&#39;zl&#39;</span>] = sheet.cell_value(j,9)
<a name="l00278"></a>00278         soil_par[<span class="stringliteral">&#39;fl&#39;</span>] = sheet.cell_value(j,10)
<a name="l00279"></a>00279         
<a name="l00280"></a>00280         m = 1-1/soil_par[<span class="stringliteral">&#39;n&#39;</span>]
<a name="l00281"></a>00281         <span class="comment"># evaluate wilting point and field capacity</span>
<a name="l00282"></a>00282         soil_par[<span class="stringliteral">&#39;evap_fc&#39;</span>] = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a56096fc2d04f0d01cf02878ea245b641">psi2theta</a>(-0.33, soil_par[<span class="stringliteral">&#39;qr&#39;</span>], soil_par[<span class="stringliteral">&#39;f&#39;</span>], 
<a name="l00283"></a>00283                                soil_par[<span class="stringliteral">&#39;a&#39;</span>], m, soil_par[<span class="stringliteral">&#39;n&#39;</span>])
<a name="l00284"></a>00284         
<a name="l00285"></a>00285         soil_par[<span class="stringliteral">&#39;evap_wp&#39;</span>] = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a56096fc2d04f0d01cf02878ea245b641">psi2theta</a>(-15, soil_par[<span class="stringliteral">&#39;qr&#39;</span>], soil_par[<span class="stringliteral">&#39;f&#39;</span>], 
<a name="l00286"></a>00286                                soil_par[<span class="stringliteral">&#39;a&#39;</span>], m, soil_par[<span class="stringliteral">&#39;n&#39;</span>])
<a name="l00287"></a>00287                                
<a name="l00288"></a>00288         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a50adabdfa73c08c5ba2d754ea71b6035">soil_par</a> = soil_par
<a name="l00289"></a>00289     
<a name="l00290"></a><a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a56096fc2d04f0d01cf02878ea245b641">00290</a>     <span class="keyword">def </span><a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a56096fc2d04f0d01cf02878ea245b641">psi2theta</a>(self,psi, thetar, thetas, alpha, m, n):
<a name="l00291"></a>00291          <span class="stringliteral">&quot;&quot;&quot;</span>
<a name="l00292"></a>00292 <span class="stringliteral">         psi2theta: given the theta calculate the pressure head</span>
<a name="l00293"></a>00293 <span class="stringliteral">         &quot;&quot;&quot;</span>
<a name="l00294"></a>00294          <span class="keywordflow">if</span> (psi&gt;=0):
<a name="l00295"></a>00295              theta = thetas
<a name="l00296"></a>00296          <span class="keywordflow">elif</span> psi&lt;-1e6:
<a name="l00297"></a>00297              theta = 1.01*thetar
<a name="l00298"></a>00298          <span class="keywordflow">else</span>:
<a name="l00299"></a>00299              theta = thetar+(thetas-thetar)*pow(1+pow(abs(alpha*psi),n),-m)
<a name="l00300"></a>00300          <span class="keywordflow">return</span> theta
<a name="l00301"></a>00301          
<a name="l00302"></a>00302     <span class="keyword">def </span>_read_runoff_par(self):
<a name="l00303"></a>00303         <span class="stringliteral">&quot;&quot;&quot;</span>
<a name="l00304"></a><a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a6bb6a8152e8d516edf9f2e9f6fa1f4ee">00304</a> <span class="stringliteral">        read the parameters related to runoff</span>
<a name="l00305"></a>00305 <span class="stringliteral">        &quot;&quot;&quot;</span>
<a name="l00306"></a>00306         <span class="comment">#get the row number from the ind</span>
<a name="l00307"></a>00307         j = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#acab9e9c33e60151482d275c275261e19">ind</a>[<span class="stringliteral">&#39;runoff_par&#39;</span>]
<a name="l00308"></a>00308         
<a name="l00309"></a>00309         book = xlrd.open_workbook(self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a26e98f8f8efad844034f0ee1ecaaea16">input_file</a>)
<a name="l00310"></a>00310         sheet = book.sheet_by_name(<span class="stringliteral">&#39;runoff_par&#39;</span>)
<a name="l00311"></a>00311         runoff_par = {}
<a name="l00312"></a>00312         <span class="keywordflow">for</span> i <span class="keywordflow">in</span> range(sheet.ncols-1):
<a name="l00313"></a>00313             runoff_par[str(sheet.cell_value(0,i+1))] = float(sheet.cell_value(j,i+1))
<a name="l00314"></a>00314         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a6bb6a8152e8d516edf9f2e9f6fa1f4ee">runoff_par</a> = runoff_par
<a name="l00315"></a>00315     
<a name="l00316"></a>00316     <span class="keyword">def </span>_surface_storage_par(self):
<a name="l00317"></a>00317         <span class="stringliteral">&quot;&quot;&quot;</span>
<a name="l00318"></a><a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#ad7c8090d53940fb47a842f4c3ec4c008">00318</a> <span class="stringliteral">        read the parameters related to surface storage</span>
<a name="l00319"></a>00319 <span class="stringliteral">        &quot;&quot;&quot;</span>
<a name="l00320"></a>00320         <span class="comment">#get the row number from the ind</span>
<a name="l00321"></a>00321         j = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#acab9e9c33e60151482d275c275261e19">ind</a>[<span class="stringliteral">&#39;surface_storage_par&#39;</span>]
<a name="l00322"></a>00322         
<a name="l00323"></a>00323         book = xlrd.open_workbook(self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a26e98f8f8efad844034f0ee1ecaaea16">input_file</a>)
<a name="l00324"></a>00324         sheet = book.sheet_by_name(<span class="stringliteral">&#39;surface_storage_par&#39;</span>)
<a name="l00325"></a>00325         surface_storage_par = {}
<a name="l00326"></a>00326         surface_storage_par[<span class="stringliteral">&#39;a&#39;</span>] = float(sheet.cell_value(j,1))
<a name="l00327"></a>00327         surface_storage_par[<span class="stringliteral">&#39;b&#39;</span>] = float(sheet.cell_value(j,2))
<a name="l00328"></a>00328         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#ad7c8090d53940fb47a842f4c3ec4c008">surface_storage_par</a> = surface_storage_par
<a name="l00329"></a>00329     
<a name="l00330"></a>00330     <span class="keyword">def </span>_read_gw_par(self):
<a name="l00331"></a>00331         <span class="stringliteral">&quot;&quot;&quot;</span>
<a name="l00332"></a><a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#ab832e29a07433d3f2b2d5ac4cfb0b7e6">00332</a> <span class="stringliteral">        read the parameters related to groundwater</span>
<a name="l00333"></a>00333 <span class="stringliteral">        &quot;&quot;&quot;</span>        
<a name="l00334"></a>00334         <span class="comment">#get the row number from the ind</span>
<a name="l00335"></a>00335         j = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#acab9e9c33e60151482d275c275261e19">ind</a>[<span class="stringliteral">&#39;gw_par&#39;</span>]
<a name="l00336"></a>00336         
<a name="l00337"></a>00337         book = xlrd.open_workbook(self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a26e98f8f8efad844034f0ee1ecaaea16">input_file</a>)
<a name="l00338"></a>00338         sheet = book.sheet_by_name(<span class="stringliteral">&#39;gw_par&#39;</span>)
<a name="l00339"></a>00339         gw_par = {}
<a name="l00340"></a>00340         <span class="keywordflow">for</span> i <span class="keywordflow">in</span> range(sheet.ncols-1):
<a name="l00341"></a>00341             gw_par[str(sheet.cell_value(0,i+1))] = float(sheet.cell_value(j,i+1))
<a name="l00342"></a>00342         
<a name="l00343"></a>00343         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#ab832e29a07433d3f2b2d5ac4cfb0b7e6">gw_par</a> = gw_par
<a name="l00344"></a>00344     
<a name="l00345"></a>00345     <span class="keyword">def </span>_read_ET_par(self):
<a name="l00346"></a>00346         <span class="stringliteral">&quot;&quot;&quot;</span>
<a name="l00347"></a><a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a3cfd6f4481a49d17b157c5540eac72e1">00347</a> <span class="stringliteral">        read the parameters related to evaporation</span>
<a name="l00348"></a>00348 <span class="stringliteral">        &quot;&quot;&quot;</span>
<a name="l00349"></a>00349         <span class="comment">#get the row number from the ind</span>
<a name="l00350"></a>00350         <span class="comment">#j = self.ind[&#39;ET_par&#39;]</span>
<a name="l00351"></a>00351         
<a name="l00352"></a>00352         <span class="comment">#book = xlrd.open_workbook(self.input_file)</span>
<a name="l00353"></a>00353         <span class="comment">#sheet = book.sheet_by_name(&#39;ET_par&#39;)</span>
<a name="l00354"></a>00354         ET_par = {}
<a name="l00355"></a>00355         <span class="comment">#ET_par[&#39;trans_fc&#39;] = sheet.cell_value(j,1)</span>
<a name="l00356"></a>00356         <span class="comment">#ET_par[&#39;trans_wp&#39;] = sheet.cell_value(j,2)</span>
<a name="l00357"></a>00357         qr = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a50adabdfa73c08c5ba2d754ea71b6035">soil_par</a>[<span class="stringliteral">&#39;qr&#39;</span>]
<a name="l00358"></a>00358         f = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a50adabdfa73c08c5ba2d754ea71b6035">soil_par</a>[<span class="stringliteral">&#39;f&#39;</span>]
<a name="l00359"></a>00359         a = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a50adabdfa73c08c5ba2d754ea71b6035">soil_par</a>[<span class="stringliteral">&#39;a&#39;</span>]
<a name="l00360"></a>00360         n = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a50adabdfa73c08c5ba2d754ea71b6035">soil_par</a>[<span class="stringliteral">&#39;n&#39;</span>]
<a name="l00361"></a>00361         m = 1-1/n
<a name="l00362"></a>00362         fl = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a50adabdfa73c08c5ba2d754ea71b6035">soil_par</a>[<span class="stringliteral">&#39;fl&#39;</span>]
<a name="l00363"></a>00363         mid_z = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a510e51fb8e07c922d377216e67e467b1">mid_z</a>
<a name="l00364"></a>00364         ET_par[<span class="stringliteral">&#39;trans_fc&#39;</span>] = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a56096fc2d04f0d01cf02878ea245b641">psi2theta</a>(-0.33, qr, f, a, m, n)*np.exp(-mid_z/fl)
<a name="l00365"></a>00365         ET_par[<span class="stringliteral">&#39;trans_wp&#39;</span>] = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a56096fc2d04f0d01cf02878ea245b641">psi2theta</a>(-15, qr, f, a, m, n)*np.exp(-mid_z/fl)
<a name="l00366"></a>00366         
<a name="l00367"></a>00367         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a3cfd6f4481a49d17b157c5540eac72e1">ET_par</a> = ET_par
<a name="l00368"></a>00368     
<a name="l00369"></a>00369     <span class="keyword">def </span>_read_forcing(self):
<a name="l00370"></a>00370         <span class="stringliteral">&quot;&quot;&quot;</span>
<a name="l00371"></a><a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#acbfdcb3e1ad97816390b787e9e3f97e0">00371</a> <span class="stringliteral">        read the forcing data from xls file</span>
<a name="l00372"></a>00372 <span class="stringliteral">        &quot;&quot;&quot;</span>
<a name="l00373"></a>00373         book = xlrd.open_workbook(self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a26e98f8f8efad844034f0ee1ecaaea16">input_file</a>)
<a name="l00374"></a>00374         sheet = book.sheet_by_name(<span class="stringliteral">&#39;forcing&#39;</span>)
<a name="l00375"></a>00375         
<a name="l00376"></a>00376         data_len = sheet.nrows-1
<a name="l00377"></a>00377         year = np.zeros(data_len)
<a name="l00378"></a>00378         doy = np.zeros(data_len)
<a name="l00379"></a>00379         rain = np.zeros(data_len)
<a name="l00380"></a>00380         pet = np.zeros(data_len)
<a name="l00381"></a>00381         ndvi = np.zeros(data_len)
<a name="l00382"></a>00382         pumping = np.zeros(data_len)
<a name="l00383"></a>00383     
<a name="l00384"></a>00384         <span class="keywordflow">for</span> i <span class="keywordflow">in</span> xrange(data_len):
<a name="l00385"></a>00385             year[i] = sheet.cell_value(i+1,0)
<a name="l00386"></a>00386             doy[i] = sheet.cell_value(i+1,1)
<a name="l00387"></a>00387             rain[i] = sheet.cell_value(i+1,2)
<a name="l00388"></a>00388             pet[i] = sheet.cell_value(i+1,3)
<a name="l00389"></a>00389             ndvi[i] = sheet.cell_value(i+1,4)
<a name="l00390"></a>00390             pumping[i] = sheet.cell_value(i+1,5)
<a name="l00391"></a>00391         
<a name="l00392"></a>00392         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#acbfdcb3e1ad97816390b787e9e3f97e0">year</a> = year
<a name="l00393"></a>00393         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a983f6b20a553b5dcf084afd98d09e373">doy</a> = doy
<a name="l00394"></a>00394         
<a name="l00395"></a>00395         <span class="comment"># if forcing data was in mm units, covert into m</span>
<a name="l00396"></a>00396         <span class="keywordflow">if</span> self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a4e1c4a48dbe0e22a4762d14e1374f4e5">forcing_units</a>[<span class="stringliteral">&#39;rain&#39;</span>] == <span class="stringliteral">&#39;mm&#39;</span>:
<a name="l00397"></a>00397             self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a96096ac6208cf704c21c8b34095bb6e5">rain</a> = rain/1000.0
<a name="l00398"></a>00398         <span class="keywordflow">elif</span> self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a4e1c4a48dbe0e22a4762d14e1374f4e5">forcing_units</a>[<span class="stringliteral">&#39;rain&#39;</span>] == <span class="stringliteral">&#39;m&#39;</span>:
<a name="l00399"></a>00399             self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a96096ac6208cf704c21c8b34095bb6e5">rain</a> = rain
<a name="l00400"></a>00400         <span class="keywordflow">else</span>:
<a name="l00401"></a>00401             <span class="keywordflow">raise</span> ValueError(<span class="stringliteral">&quot;The units of rain should be either &#39;mm&#39; or &#39;m&#39; &quot;</span>)
<a name="l00402"></a>00402 
<a name="l00403"></a>00403         <span class="keywordflow">if</span> self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a4e1c4a48dbe0e22a4762d14e1374f4e5">forcing_units</a>[<span class="stringliteral">&#39;pet&#39;</span>] == <span class="stringliteral">&#39;mm&#39;</span>:
<a name="l00404"></a>00404             self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#afd32a65f25fe5d1efb5479c05f3b5534">pet</a> = pet/1000.0
<a name="l00405"></a>00405         <span class="keywordflow">elif</span> self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a4e1c4a48dbe0e22a4762d14e1374f4e5">forcing_units</a>[<span class="stringliteral">&#39;pet&#39;</span>] == <span class="stringliteral">&#39;m&#39;</span>:
<a name="l00406"></a>00406             self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#afd32a65f25fe5d1efb5479c05f3b5534">pet</a> = pet
<a name="l00407"></a>00407         <span class="keywordflow">else</span>:
<a name="l00408"></a>00408             <span class="keywordflow">raise</span> ValueError(<span class="stringliteral">&quot;The units of PET should be either &#39;mm&#39; or &#39;m&#39; &quot;</span>)
<a name="l00409"></a>00409             
<a name="l00410"></a>00410         <span class="keywordflow">if</span> self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a4e1c4a48dbe0e22a4762d14e1374f4e5">forcing_units</a>[<span class="stringliteral">&#39;pumping&#39;</span>] == <span class="stringliteral">&#39;mm&#39;</span>:
<a name="l00411"></a>00411             self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#afd94ae04654768dfbe327f5d0224ec9c">pumping</a> = pumping/1000.0
<a name="l00412"></a>00412         <span class="keywordflow">elif</span> self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a4e1c4a48dbe0e22a4762d14e1374f4e5">forcing_units</a>[<span class="stringliteral">&#39;pumping&#39;</span>] == <span class="stringliteral">&#39;m&#39;</span>:
<a name="l00413"></a>00413             self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#afd94ae04654768dfbe327f5d0224ec9c">pumping</a> = pumping
<a name="l00414"></a>00414         <span class="keywordflow">else</span>:
<a name="l00415"></a>00415             <span class="keywordflow">raise</span> ValueError(<span class="stringliteral">&quot;The units of pumping should be either &#39;mm&#39; or &#39;m&#39; &quot;</span>)
<a name="l00416"></a>00416         
<a name="l00417"></a>00417         <span class="comment"># compute the fractional vegetation cover, rooting depth and lai</span>
<a name="l00418"></a>00418         ndvi_max = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a830f8dd4a142702f15ddea9b0f7feccd">ndvi_max</a>
<a name="l00419"></a>00419         ndvi_min = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#ad94433328bd20e7a101c96fcae78084c">ndvi_min</a>
<a name="l00420"></a>00420         ndvi[ndvi&gt;ndvi_max] = ndvi_max
<a name="l00421"></a>00421         ndvi[ndvi&lt;ndvi_min] = ndvi_min
<a name="l00422"></a>00422         
<a name="l00423"></a>00423         fapar = 1.60*ndvi-0.02
<a name="l00424"></a>00424         fapar_max = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#aff2425a3186a6de8e19bc79b88f2fdb7">fapar_max</a>
<a name="l00425"></a>00425         
<a name="l00426"></a>00426         lai_max = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a9ce1629483176cda7978d627e1e9a0ed">lai_max</a>
<a name="l00427"></a>00427         lai = lai_max*np.log(1-fapar)/np.log(1-fapar_max)
<a name="l00428"></a>00428         
<a name="l00429"></a>00429         Rd_max = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a1d0dd12d2a02beb616d482966b338ad0">Rd_max</a>  
<a name="l00430"></a>00430         Rd = Rd_max*lai/lai_max
<a name="l00431"></a>00431         fc = ((ndvi-ndvi_max)/(ndvi_max-ndvi_min))**2
<a name="l00432"></a>00432         
<a name="l00433"></a>00433         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a2d8c44c990da614f2217afc62d5110bc">kc</a> = 0.8+0.4*(1-np.exp(-0.7*lai))
<a name="l00434"></a>00434         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a3245bbf3adb602f5f25919e6392037c8">ndvi</a> = ndvi
<a name="l00435"></a>00435         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a209ba87f445e69bac71538ac85baf5c7">lai</a> = lai        
<a name="l00436"></a>00436         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#ab3f478f5f844e2e16d1d375a6ad6c1b6">Rd</a> = Rd
<a name="l00437"></a>00437         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#aecde4bafbc18385bda76b1415791fef7">fc</a> = fc
<a name="l00438"></a>00438                
<a name="l00439"></a>00439 
<a name="l00440"></a>00440     <span class="keyword">def </span>_read_ofile_name(self):
<a name="l00441"></a>00441         <span class="stringliteral">&quot;&quot;&quot;</span>
<a name="l00442"></a><a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a9f9dab93516338236b99a5fd96d708cb">00442</a> <span class="stringliteral">        read the forcing data from xls file</span>
<a name="l00443"></a>00443 <span class="stringliteral">        &quot;&quot;&quot;</span>
<a name="l00444"></a>00444         book = xlrd.open_workbook(self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a26e98f8f8efad844034f0ee1ecaaea16">input_file</a>)
<a name="l00445"></a>00445         sheet = book.sheet_by_name(<span class="stringliteral">&#39;output_par&#39;</span>)
<a name="l00446"></a>00446         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a9f9dab93516338236b99a5fd96d708cb">ofile_name</a> = str(sheet.cell_value(0,1))
<a name="l00447"></a>00447 
<a name="l00448"></a>00448 
<a name="l00449"></a>00449     <span class="keyword">def </span>_colored_output(self, output_message, color):
<a name="l00450"></a>00450         <span class="stringliteral">&quot;&quot;&quot;</span>
<a name="l00451"></a>00451 <span class="stringliteral">        This functions print  the output_message in the color</span>
<a name="l00452"></a>00452 <span class="stringliteral">        Input:</span>
<a name="l00453"></a>00453 <span class="stringliteral">            output_messgae: the text you want to print</span>
<a name="l00454"></a>00454 <span class="stringliteral">            color: the color in which you want to print text, it could be one of:</span>
<a name="l00455"></a>00455 <span class="stringliteral">                30: Gray</span>
<a name="l00456"></a>00456 <span class="stringliteral">                31: Red</span>
<a name="l00457"></a>00457 <span class="stringliteral">                32: Green</span>
<a name="l00458"></a>00458 <span class="stringliteral">                33: Yellow</span>
<a name="l00459"></a>00459 <span class="stringliteral">                34: Blue</span>
<a name="l00460"></a>00460 <span class="stringliteral">                35: Magneta</span>
<a name="l00461"></a>00461 <span class="stringliteral">                66: Cyan</span>
<a name="l00462"></a>00462 <span class="stringliteral">                37: White</span>
<a name="l00463"></a>00463 <span class="stringliteral">                38: Crimson</span>
<a name="l00464"></a>00464 <span class="stringliteral">                41: Highlighted Red</span>
<a name="l00465"></a>00465 <span class="stringliteral">                42: Highlighted Green </span>
<a name="l00466"></a>00466 <span class="stringliteral">                43: Highlighted Brown </span>
<a name="l00467"></a>00467 <span class="stringliteral">                44: Highlighted Blue </span>
<a name="l00468"></a>00468 <span class="stringliteral">                45: Highlighted Magenta </span>
<a name="l00469"></a>00469 <span class="stringliteral">                46: Highlighted Cyan</span>
<a name="l00470"></a>00470 <span class="stringliteral">                47: Highlighted Gray </span>
<a name="l00471"></a>00471 <span class="stringliteral">                48: Highlighted Crimson </span>
<a name="l00472"></a>00472 <span class="stringliteral">        Output:</span>
<a name="l00473"></a>00473 <span class="stringliteral">            This returns None, but print the output in python shell</span>
<a name="l00474"></a>00474 <span class="stringliteral">        &quot;&quot;&quot;</span>
<a name="l00475"></a>00475                 
<a name="l00476"></a>00476         print((<span class="stringliteral">&quot;\033[31m&quot;</span> +output_message+ <span class="stringliteral">&quot;\033[0m&quot;</span>).replace(<span class="stringliteral">&#39;31&#39;</span>,str(color)))
<a name="l00477"></a>00477 
<a name="l00478"></a>00478     <span class="keyword">def </span>_get_forcing(self):
<a name="l00479"></a>00479         <span class="stringliteral">&quot;&quot;&quot;</span>
<a name="l00480"></a><a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a4f543d6c61ef54548518d4adb1e2a44a">00480</a> <span class="stringliteral">        this will give the forcing at time t</span>
<a name="l00481"></a>00481 <span class="stringliteral">        &quot;&quot;&quot;</span>
<a name="l00482"></a>00482         <span class="comment"># the PET is multiplied by crop coefficient</span>
<a name="l00483"></a>00483         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a4f543d6c61ef54548518d4adb1e2a44a">rain_cur</a> = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a96096ac6208cf704c21c8b34095bb6e5">rain</a>[self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a964b143e81cb0e3b7dca89db3770f5af">t</a>]
<a name="l00484"></a>00484         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#ab74feeb266e0b8556b83d44eb00b7a90">pet_cur</a> = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#afd32a65f25fe5d1efb5479c05f3b5534">pet</a>[self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a964b143e81cb0e3b7dca89db3770f5af">t</a>]*self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a2d8c44c990da614f2217afc62d5110bc">kc</a>[self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a964b143e81cb0e3b7dca89db3770f5af">t</a>]
<a name="l00485"></a>00485         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a3b8003e30daf85e2d342b2ba7cc3b0bd">lai_cur</a> = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a209ba87f445e69bac71538ac85baf5c7">lai</a>[self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a964b143e81cb0e3b7dca89db3770f5af">t</a>]
<a name="l00486"></a>00486         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a4aa6481e03a36b7aafc17181a1efd931">pumping_cur</a> = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#afd94ae04654768dfbe327f5d0224ec9c">pumping</a>[self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a964b143e81cb0e3b7dca89db3770f5af">t</a>]
<a name="l00487"></a>00487         
<a name="l00488"></a>00488         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a053c3f9cb489cc7184c0b42a7534e159">cur_year</a> = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#acbfdcb3e1ad97816390b787e9e3f97e0">year</a>[self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a964b143e81cb0e3b7dca89db3770f5af">t</a>]
<a name="l00489"></a>00489         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#aa8eb44d3763456055f9b3d16f8ea7a34">cur_doy</a> = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a983f6b20a553b5dcf084afd98d09e373">doy</a>[self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a964b143e81cb0e3b7dca89db3770f5af">t</a>]
<a name="l00490"></a>00490 
<a name="l00491"></a>00491         
<a name="l00492"></a>00492     <span class="keyword">def </span>_interception_fun(self):
<a name="l00493"></a>00493         <span class="stringliteral">&quot;&quot;&quot;</span>
<a name="l00494"></a>00494 <span class="stringliteral">        Input:</span>
<a name="l00495"></a>00495 <span class="stringliteral">            lai_cur:    LAI at the current time step</span>
<a name="l00496"></a>00496 <span class="stringliteral">            pet_cur:     PET at the current time step</span>
<a name="l00497"></a>00497 <span class="stringliteral">            rain_cur:    Rainfall at the current time step</span>
<a name="l00498"></a>00498 <span class="stringliteral">            </span>
<a name="l00499"></a>00499 <span class="stringliteral">        Output:</span>
<a name="l00500"></a>00500 <span class="stringliteral">            E_In:     Evaporation from Interception</span>
<a name="l00501"></a>00501 <span class="stringliteral">            T:        Transpiration</span>
<a name="l00502"></a>00502 <span class="stringliteral">            E:        Evaporation</span>
<a name="l00503"></a>00503 <span class="stringliteral">            net_rain_cur:   Net rainfall (precipitation-interception loss) at </span>
<a name="l00504"></a><a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a8a2679444722f4c3044c227074f3c6b7">00504</a> <span class="stringliteral">            current time step</span>
<a name="l00505"></a>00505 <span class="stringliteral">        &quot;&quot;&quot;</span>
<a name="l00506"></a>00506         In = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a209ba87f445e69bac71538ac85baf5c7">lai</a>[self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a964b143e81cb0e3b7dca89db3770f5af">t</a>]*0.2/1000.0
<a name="l00507"></a>00507         soil_cover = np.exp(-0.5*self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a3b8003e30daf85e2d342b2ba7cc3b0bd">lai_cur</a>)
<a name="l00508"></a>00508         veg_cover = 1 - soil_cover
<a name="l00509"></a>00509         
<a name="l00510"></a>00510         E_In = np.min([veg_cover*self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a4f543d6c61ef54548518d4adb1e2a44a">rain_cur</a>, veg_cover*self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#ab74feeb266e0b8556b83d44eb00b7a90">pet_cur</a>, veg_cover*In])
<a name="l00511"></a>00511         T = np.min([veg_cover*self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#ab74feeb266e0b8556b83d44eb00b7a90">pet_cur</a> - 0.2*E_In, 1.2*self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#ab74feeb266e0b8556b83d44eb00b7a90">pet_cur</a> - E_In])
<a name="l00512"></a>00512         E = np.min([soil_cover*self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#ab74feeb266e0b8556b83d44eb00b7a90">pet_cur</a>, 1.2*self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#ab74feeb266e0b8556b83d44eb00b7a90">pet_cur</a>-T-E_In])
<a name="l00513"></a>00513         net_rain_cur = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a4f543d6c61ef54548518d4adb1e2a44a">rain_cur</a> - E_In
<a name="l00514"></a>00514         
<a name="l00515"></a>00515         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a03e7b35599db36f25f04205462504f70">E_In</a>[self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a964b143e81cb0e3b7dca89db3770f5af">t</a>] = E_In
<a name="l00516"></a>00516         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a8a2679444722f4c3044c227074f3c6b7">trans</a> = T
<a name="l00517"></a>00517         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#ac9cf54d978230df86fabf92a384c2aa6">evap</a> = E
<a name="l00518"></a>00518         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a41bf6005d6b836556728403530ea673d">net_rain_cur</a> = net_rain_cur
<a name="l00519"></a>00519     
<a name="l00520"></a>00520     <span class="keyword">def </span>_runoff_fun(self):
<a name="l00521"></a>00521         <span class="stringliteral">&quot;&quot;&quot;</span>
<a name="l00522"></a>00522 <span class="stringliteral">        this module will calculate the runoff based on the initial soil moisture </span>
<a name="l00523"></a>00523 <span class="stringliteral">        and net precipitation</span>
<a name="l00524"></a>00524 <span class="stringliteral">        </span>
<a name="l00525"></a>00525 <span class="stringliteral">        Input:</span>
<a name="l00526"></a>00526 <span class="stringliteral">            C:            Average soil moisture</span>
<a name="l00527"></a>00527 <span class="stringliteral">            Pn:           Precipitation after interception loss</span>
<a name="l00528"></a>00528 <span class="stringliteral">            runoff_par:   runoff parameters [&#39;Cm&#39;,&#39;B&#39;]</span>
<a name="l00529"></a>00529 <span class="stringliteral">            </span>
<a name="l00530"></a>00530 <span class="stringliteral">        Output:</span>
<a name="l00531"></a><a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a7bd80cc9062cf9b95f2966a6e59ee4eb">00531</a> <span class="stringliteral">            runoff_cur:     Runoff at current time step</span>
<a name="l00532"></a>00532 <span class="stringliteral">        &quot;&quot;&quot;</span>
<a name="l00533"></a>00533         <span class="comment">#Cm = self.runoff_par[&#39;Cm&#39;]</span>
<a name="l00534"></a>00534         <span class="comment">#B = self.runoff_par[&#39;B&#39;]</span>
<a name="l00535"></a>00535         <span class="comment">#F = 1 - (1- self.sm[:,self.t].mean()/Cm)**B </span>
<a name="l00536"></a>00536         <span class="comment">#self.runoff_cur = self.net_rain_cur*F</span>
<a name="l00537"></a>00537         <span class="comment">#self.runoff[self.t] = self.runoff_cur</span>
<a name="l00538"></a>00538         
<a name="l00539"></a>00539         <span class="comment"># chen and dudhia</span>
<a name="l00540"></a>00540         Kdt_ref = 3.0
<a name="l00541"></a>00541         Kref = 2e-6
<a name="l00542"></a>00542         theta_s = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a50adabdfa73c08c5ba2d754ea71b6035">soil_par</a>[<span class="stringliteral">&#39;f&#39;</span>]*np.exp(-self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a510e51fb8e07c922d377216e67e467b1">mid_z</a>/self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a50adabdfa73c08c5ba2d754ea71b6035">soil_par</a>[<span class="stringliteral">&#39;fl&#39;</span>])
<a name="l00543"></a>00543         Dx = theta_s - self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a08fb52fecd1da4174c3396e531f3285a">sm</a>[:,self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a964b143e81cb0e3b7dca89db3770f5af">t</a>]
<a name="l00544"></a>00544         Dx = Dx*self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a510e51fb8e07c922d377216e67e467b1">mid_z</a>
<a name="l00545"></a>00545         Dx = Dx[:3].sum()
<a name="l00546"></a>00546         Kdt = Kdt_ref*self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a50adabdfa73c08c5ba2d754ea71b6035">soil_par</a>[<span class="stringliteral">&#39;Ks&#39;</span>]/Kref
<a name="l00547"></a>00547         
<a name="l00548"></a>00548         Pn = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a41bf6005d6b836556728403530ea673d">net_rain_cur</a>
<a name="l00549"></a>00549         Imax = Pn*(Dx*(1-np.exp(-Kdt)))/(Pn+Dx*(1-np.exp(-Kdt)))
<a name="l00550"></a>00550         
<a name="l00551"></a>00551         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a7bd80cc9062cf9b95f2966a6e59ee4eb">runoff_cur</a> = Pn - Imax 
<a name="l00552"></a>00552         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#acc1b1f528d44d2163dbacd614e13fc20">runoff</a>[self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a964b143e81cb0e3b7dca89db3770f5af">t</a>] = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a7bd80cc9062cf9b95f2966a6e59ee4eb">runoff_cur</a>
<a name="l00553"></a>00553         
<a name="l00554"></a>00554         
<a name="l00555"></a>00555         
<a name="l00556"></a>00556     <span class="keyword">def </span>_soil_fun(self):
<a name="l00557"></a>00557         <span class="stringliteral">&quot;&quot;&quot;</span>
<a name="l00558"></a>00558 <span class="stringliteral">        Input:</span>
<a name="l00559"></a>00559 <span class="stringliteral">            soil_par     : soil hydraulic parameters</span>
<a name="l00560"></a>00560 <span class="stringliteral">            z            : thicknes of layers</span>
<a name="l00561"></a>00561 <span class="stringliteral">            R            : runoff</span>
<a name="l00562"></a>00562 <span class="stringliteral">            no_layer     : no. of layers</span>
<a name="l00563"></a>00563 <span class="stringliteral">            theta_0      : initial soil moisture</span>
<a name="l00564"></a>00564 <span class="stringliteral">            root_frac    : root fraction in each layer</span>
<a name="l00565"></a>00565 <span class="stringliteral">            T            : transpiration</span>
<a name="l00566"></a>00566 <span class="stringliteral">            Pn           : net precipitation (precipitation - interception)</span>
<a name="l00567"></a>00567 <span class="stringliteral">            E            : soil evaporation</span>
<a name="l00568"></a>00568 <span class="stringliteral">            Pu           : pumping</span>
<a name="l00569"></a>00569 <span class="stringliteral">            dt           : time step</span>
<a name="l00570"></a>00570 <span class="stringliteral">        Output:</span>
<a name="l00571"></a>00571 <span class="stringliteral">            theta_1: soil moisture for next time step</span>
<a name="l00572"></a><a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a4b578bc7c3c2f349e8f77463e74a0a41">00572</a> <span class="stringliteral">            Re: recharge (L)</span>
<a name="l00573"></a>00573 <span class="stringliteral">        &quot;&quot;&quot;</span>
<a name="l00574"></a>00574         <span class="comment"># convert the fluxes from L to L/T</span>
<a name="l00575"></a>00575         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a7bd80cc9062cf9b95f2966a6e59ee4eb">runoff_cur</a> /= self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a4dda58804e5dbbbc9481b177090863d5">dt</a>
<a name="l00576"></a>00576         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#ac9cf54d978230df86fabf92a384c2aa6">evap</a> /= self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a4dda58804e5dbbbc9481b177090863d5">dt</a>
<a name="l00577"></a>00577         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a8a2679444722f4c3044c227074f3c6b7">trans</a> /= self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a4dda58804e5dbbbc9481b177090863d5">dt</a>
<a name="l00578"></a>00578         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a41bf6005d6b836556728403530ea673d">net_rain_cur</a> /= self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a4dda58804e5dbbbc9481b177090863d5">dt</a>
<a name="l00579"></a>00579         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a4aa6481e03a36b7aafc17181a1efd931">pumping_cur</a> /= self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a4dda58804e5dbbbc9481b177090863d5">dt</a>
<a name="l00580"></a>00580         
<a name="l00581"></a>00581         <span class="comment"># initialize soil moisture at next time step        </span>
<a name="l00582"></a>00582         theta_1_mat = np.zeros(self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#ab4ad7e2cebfbfd4c6ede9f33a659b269">no_layer</a>)
<a name="l00583"></a>00583                 
<a name="l00584"></a>00584         <span class="comment"># estimate hydraulic properties</span>
<a name="l00585"></a>00585         K = np.zeros((self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#ab4ad7e2cebfbfd4c6ede9f33a659b269">no_layer</a>,1))
<a name="l00586"></a>00586         D = np.zeros((self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#ab4ad7e2cebfbfd4c6ede9f33a659b269">no_layer</a>,1))
<a name="l00587"></a>00587         <span class="keywordflow">for</span> i <span class="keywordflow">in</span> range(self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#ab4ad7e2cebfbfd4c6ede9f33a659b269">no_layer</a>):
<a name="l00588"></a>00588             <span class="keywordflow">if</span> i&lt;self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#ab4ad7e2cebfbfd4c6ede9f33a659b269">no_layer</a>-1:
<a name="l00589"></a>00589                 <span class="comment"># using the maximum value of theta</span>
<a name="l00590"></a>00590                 <span class="comment">#K[i], D[i] = self._shp(max(self.sm[i,self.t],self.sm[i+1, self.t]),i)</span>
<a name="l00591"></a>00591                 <span class="comment"># using the arithmatic mean of theta</span>
<a name="l00592"></a>00592                 K[i], D[i] = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a92c681dd31aeffc3cacd80b1f02ba966">_shp</a>(0.5*(self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a08fb52fecd1da4174c3396e531f3285a">sm</a>[i, self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a964b143e81cb0e3b7dca89db3770f5af">t</a>]+self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a08fb52fecd1da4174c3396e531f3285a">sm</a>[i+1, self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a964b143e81cb0e3b7dca89db3770f5af">t</a>]),i)
<a name="l00593"></a>00593             <span class="keywordflow">else</span>:
<a name="l00594"></a>00594                 K[i], D[i] = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a92c681dd31aeffc3cacd80b1f02ba966">_shp</a>(self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a08fb52fecd1da4174c3396e531f3285a">sm</a>[i,self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a964b143e81cb0e3b7dca89db3770f5af">t</a>],i)
<a name="l00595"></a>00595         K = K.flatten()*np.exp(-self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a510e51fb8e07c922d377216e67e467b1">mid_z</a>/self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a50adabdfa73c08c5ba2d754ea71b6035">soil_par</a>[<span class="stringliteral">&#39;zl&#39;</span>])
<a name="l00596"></a>00596         D = D.flatten()*np.exp(-self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a510e51fb8e07c922d377216e67e467b1">mid_z</a>/self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a50adabdfa73c08c5ba2d754ea71b6035">soil_par</a>[<span class="stringliteral">&#39;zl&#39;</span>])
<a name="l00597"></a>00597         
<a name="l00598"></a>00598         <span class="comment"># calculate stress in soil moisture and subsequently the actual </span>
<a name="l00599"></a>00599         <span class="comment"># evaporation and transpiration</span>
<a name="l00600"></a>00600         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a921a38184eddb3cedb68c2950f0dea3b">_smi_fun</a>()
<a name="l00601"></a>00601         AE = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#ac9cf54d978230df86fabf92a384c2aa6">evap</a>*self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a1989603c313d554253661ff8f5abbd3d">SSMI</a>
<a name="l00602"></a>00602         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#ad24e4715733dcd15a9c219bac4e3aa9a">_transpiration_fun</a>()
<a name="l00603"></a>00603         AT = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a606f96e5813d4156947092f6dfa34ece">AT</a> 
<a name="l00604"></a>00604                 
<a name="l00605"></a>00605         <span class="comment"># set up the A and U matrix</span>
<a name="l00606"></a>00606         A = np.zeros((self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#ab4ad7e2cebfbfd4c6ede9f33a659b269">no_layer</a>, self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#ab4ad7e2cebfbfd4c6ede9f33a659b269">no_layer</a>))
<a name="l00607"></a>00607         U = np.zeros((self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#ab4ad7e2cebfbfd4c6ede9f33a659b269">no_layer</a>,1))
<a name="l00608"></a>00608         z = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a0da4da8f8723eb5fc459ffc274505d4e">z</a>
<a name="l00609"></a>00609         <span class="keywordflow">for</span> i <span class="keywordflow">in</span> range(self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#ab4ad7e2cebfbfd4c6ede9f33a659b269">no_layer</a>):
<a name="l00610"></a>00610             <span class="keywordflow">if</span> i == 0:
<a name="l00611"></a>00611                 A[0,0] = -D[1]/(0.5*z[1]*(z[1]+z[2]))
<a name="l00612"></a>00612                 A[0,1] = D[1]/(0.5*z[1]*(z[1]+z[2]))
<a name="l00613"></a>00613                 U[0] = (-AT[0] - K[0] + self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a41bf6005d6b836556728403530ea673d">net_rain_cur</a> - AE - self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a7bd80cc9062cf9b95f2966a6e59ee4eb">runoff_cur</a> \
<a name="l00614"></a>00614                 + self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a4aa6481e03a36b7aafc17181a1efd931">pumping_cur</a>)/z[0]
<a name="l00615"></a>00615             <span class="keywordflow">elif</span> i == self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#ab4ad7e2cebfbfd4c6ede9f33a659b269">no_layer</a>-1:
<a name="l00616"></a>00616                 A[i,i] = -D[i-1]/(0.5*z[i]*(z[i-1]+z[i]))
<a name="l00617"></a>00617                 A[i,i-1] = D[i-1]/(0.5*z[i]*(z[i-1]+z[i])) 
<a name="l00618"></a>00618                 U[i] = (-AT[i] + K[i-1] - K[i])/z[i]
<a name="l00619"></a>00619             <span class="keywordflow">else</span>:
<a name="l00620"></a>00620                 A[i,i-1] = D[i-1]/(0.5*z[i]*(z[i-1]+z[i]))
<a name="l00621"></a>00621                 A[i,i+1] = D[i]/(0.5*z[i]*(z[i]+z[i+1]))
<a name="l00622"></a>00622                 A[i,i] = -A[i,i-1] -A[i,i+1]
<a name="l00623"></a>00623                 U[i] = (-AT[i] +K[i-1] - K[i])/z[i]
<a name="l00624"></a>00624                     
<a name="l00625"></a>00625             <span class="comment"># convert from A,U to F,G</span>
<a name="l00626"></a>00626             F = np.eye(self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#ab4ad7e2cebfbfd4c6ede9f33a659b269">no_layer</a>) + A*self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a4dda58804e5dbbbc9481b177090863d5">dt</a>
<a name="l00627"></a>00627             <span class="comment">#    if (F&gt;1.4).any() | (F&lt;0.6).any():</span>
<a name="l00628"></a>00628             <span class="comment">#        F = expm(A*dt)</span>
<a name="l00629"></a>00629             G = np.dot(F,U)*self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a4dda58804e5dbbbc9481b177090863d5">dt</a>
<a name="l00630"></a>00630             
<a name="l00631"></a>00631             <span class="comment"># calculate theta for next time step</span>
<a name="l00632"></a>00632             theta_1 = np.dot(F, self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a08fb52fecd1da4174c3396e531f3285a">sm</a>[:,self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a964b143e81cb0e3b7dca89db3770f5af">t</a>]) + G.flatten()
<a name="l00633"></a>00633             
<a name="l00634"></a>00634             <span class="comment"># convert recharge from L/T to L</span>
<a name="l00635"></a>00635             Re = K[-1]*self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a4dda58804e5dbbbc9481b177090863d5">dt</a>
<a name="l00636"></a>00636             
<a name="l00637"></a>00637             <span class="comment"># remove the water as hortonian runoff, </span>
<a name="l00638"></a>00638             <span class="comment"># if the soil moisture exceeds saturation</span>
<a name="l00639"></a>00639             <span class="keywordflow">if</span> theta_1[0] &gt;= self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a50adabdfa73c08c5ba2d754ea71b6035">soil_par</a>[<span class="stringliteral">&#39;f&#39;</span>]:
<a name="l00640"></a>00640                 HR = (theta_1[0]-self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a50adabdfa73c08c5ba2d754ea71b6035">soil_par</a>[<span class="stringliteral">&#39;f&#39;</span>])*z[0]
<a name="l00641"></a>00641                 theta_1[0] = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a50adabdfa73c08c5ba2d754ea71b6035">soil_par</a>[<span class="stringliteral">&#39;f&#39;</span>]
<a name="l00642"></a>00642             <span class="keywordflow">else</span>:
<a name="l00643"></a>00643                 HR = 0
<a name="l00644"></a>00644 
<a name="l00645"></a>00645             <span class="comment">#check for the range of the theta</span>
<a name="l00646"></a>00646             theta_s = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a50adabdfa73c08c5ba2d754ea71b6035">soil_par</a>[<span class="stringliteral">&#39;f&#39;</span>]*np.exp(-self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a510e51fb8e07c922d377216e67e467b1">mid_z</a>/self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a50adabdfa73c08c5ba2d754ea71b6035">soil_par</a>[<span class="stringliteral">&#39;fl&#39;</span>])
<a name="l00647"></a>00647             wp = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a3cfd6f4481a49d17b157c5540eac72e1">ET_par</a>[<span class="stringliteral">&#39;trans_wp&#39;</span>]*np.exp(-self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a510e51fb8e07c922d377216e67e467b1">mid_z</a>/self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a50adabdfa73c08c5ba2d754ea71b6035">soil_par</a>[<span class="stringliteral">&#39;fl&#39;</span>])
<a name="l00648"></a>00648             <span class="keywordflow">for</span> j <span class="keywordflow">in</span> range(self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#ab4ad7e2cebfbfd4c6ede9f33a659b269">no_layer</a>):
<a name="l00649"></a>00649                 <span class="keywordflow">if</span> theta_1[j]&gt;theta_s[j]:
<a name="l00650"></a>00650                     theta_1[j] = theta_s[j]
<a name="l00651"></a>00651                 <span class="keywordflow">if</span> theta_1[j]&lt;wp[j]:
<a name="l00652"></a>00652                     theta_1[j] = wp[j]
<a name="l00653"></a>00653             
<a name="l00654"></a>00654             <span class="comment"># put the result of this pixel into matrix</span>
<a name="l00655"></a>00655             self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a08fb52fecd1da4174c3396e531f3285a">sm</a>[:,self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a964b143e81cb0e3b7dca89db3770f5af">t</a>+1] = theta_1.flatten()
<a name="l00656"></a>00656             self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#ad9b28ab0b44828977798c8560a7204bd">G</a> = G
<a name="l00657"></a>00657             self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a73985b3aa384a891f27b8a058906742d">F</a> = F
<a name="l00658"></a>00658             self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a4b578bc7c3c2f349e8f77463e74a0a41">theta_1</a> = theta_1
<a name="l00659"></a>00659             self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a69ce28df534af85dfef7981b90b2dcad">recharge</a>[self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a964b143e81cb0e3b7dca89db3770f5af">t</a>] = Re
<a name="l00660"></a>00660             self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#acd5dcc28478c407c7657e51117566629">actual_evap</a>[self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a964b143e81cb0e3b7dca89db3770f5af">t</a>] = AE*self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a4dda58804e5dbbbc9481b177090863d5">dt</a>
<a name="l00661"></a>00661             self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a9c0472e31b5748e4a9e719a8b1539440">actual_trans</a>[self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a964b143e81cb0e3b7dca89db3770f5af">t</a>] = AT.sum()*self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a4dda58804e5dbbbc9481b177090863d5">dt</a>
<a name="l00662"></a>00662             self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a9836fdfee8b087ba3cbc882179db120e">horton_runoff</a>[self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a964b143e81cb0e3b7dca89db3770f5af">t</a>] = HR
<a name="l00663"></a>00663             
<a name="l00664"></a>00664     <span class="keyword">def </span>_smi_fun(self):
<a name="l00665"></a>00665         <span class="stringliteral">&quot;&quot;&quot;</span>
<a name="l00666"></a>00666 <span class="stringliteral">        this module computes the surface soil moisture stress index, and root zone soil moisture </span>
<a name="l00667"></a><a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a1989603c313d554253661ff8f5abbd3d">00667</a> <span class="stringliteral">        stress index</span>
<a name="l00668"></a>00668 <span class="stringliteral">        &quot;&quot;&quot;</span>
<a name="l00669"></a>00669         
<a name="l00670"></a>00670         <span class="comment"># calculate surface soil moisture index</span>
<a name="l00671"></a>00671         SSMI = (self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a08fb52fecd1da4174c3396e531f3285a">sm</a>[0,self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a964b143e81cb0e3b7dca89db3770f5af">t</a>] - self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a50adabdfa73c08c5ba2d754ea71b6035">soil_par</a>[<span class="stringliteral">&#39;evap_wp&#39;</span>])/(
<a name="l00672"></a>00672                 self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a50adabdfa73c08c5ba2d754ea71b6035">soil_par</a>[<span class="stringliteral">&#39;evap_fc&#39;</span>] - self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a50adabdfa73c08c5ba2d754ea71b6035">soil_par</a>[<span class="stringliteral">&#39;evap_wp&#39;</span>])
<a name="l00673"></a>00673                 
<a name="l00674"></a>00674         <span class="keywordflow">if</span> SSMI &gt; 1: 
<a name="l00675"></a>00675             SSMI = 1
<a name="l00676"></a>00676         <span class="keywordflow">elif</span> SSMI&lt;0:
<a name="l00677"></a>00677             SSMI = 0
<a name="l00678"></a>00678     
<a name="l00679"></a>00679         <span class="comment"># calculate root zone soil moisture index</span>
<a name="l00680"></a>00680         RZSMI = np.zeros((self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#ab4ad7e2cebfbfd4c6ede9f33a659b269">no_layer</a>,))
<a name="l00681"></a>00681         
<a name="l00682"></a>00682         <span class="keywordflow">for</span> i <span class="keywordflow">in</span> range(self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#ab4ad7e2cebfbfd4c6ede9f33a659b269">no_layer</a>):
<a name="l00683"></a>00683             trans_wp = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a3cfd6f4481a49d17b157c5540eac72e1">ET_par</a>[<span class="stringliteral">&#39;trans_wp&#39;</span>][i]
<a name="l00684"></a>00684             trans_fc = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a3cfd6f4481a49d17b157c5540eac72e1">ET_par</a>[<span class="stringliteral">&#39;trans_fc&#39;</span>][i]
<a name="l00685"></a>00685             <span class="keywordflow">if</span> (self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a08fb52fecd1da4174c3396e531f3285a">sm</a>[i,self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a964b143e81cb0e3b7dca89db3770f5af">t</a>] &lt; trans_wp):
<a name="l00686"></a>00686                 RZSMI[i] = 0
<a name="l00687"></a>00687             <span class="keywordflow">elif</span> self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a08fb52fecd1da4174c3396e531f3285a">sm</a>[i,self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a964b143e81cb0e3b7dca89db3770f5af">t</a>] &gt; trans_fc:
<a name="l00688"></a>00688                 RZSMI[i] = 1
<a name="l00689"></a>00689             <span class="keywordflow">else</span>:
<a name="l00690"></a>00690                 
<a name="l00691"></a>00691                 RZSMI[i] = (self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a08fb52fecd1da4174c3396e531f3285a">sm</a>[i,self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a964b143e81cb0e3b7dca89db3770f5af">t</a>]-trans_wp)/(trans_fc - trans_wp)
<a name="l00692"></a>00692             
<a name="l00693"></a>00693         
<a name="l00694"></a>00694         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a1989603c313d554253661ff8f5abbd3d">SSMI</a> = SSMI
<a name="l00695"></a>00695         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#aa041653a0ec67458843be62a2f35ba5d">RZSMI</a> = RZSMI
<a name="l00696"></a>00696     
<a name="l00697"></a>00697     
<a name="l00698"></a>00698     <span class="keyword">def </span>_transpiration_fun(self):
<a name="l00699"></a>00699         <span class="stringliteral">&quot;&quot;&quot;</span>
<a name="l00700"></a><a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#ae39712893505e7cdcde97c8cbb7204b7">00700</a> <span class="stringliteral">        this function computes the actual transpiration for all the soil layers</span>
<a name="l00701"></a>00701 <span class="stringliteral">        &quot;&quot;&quot;</span>
<a name="l00702"></a>00702         <span class="comment"># root distribution</span>
<a name="l00703"></a>00703         Lrd = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#aa631b6b71016719fedf230aec1edc439">Lrd</a>
<a name="l00704"></a>00704         Rd = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#ab3f478f5f844e2e16d1d375a6ad6c1b6">Rd</a>[self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a964b143e81cb0e3b7dca89db3770f5af">t</a>]
<a name="l00705"></a>00705         r_density = np.empty(self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#ab4ad7e2cebfbfd4c6ede9f33a659b269">no_layer</a>)
<a name="l00706"></a>00706         <span class="keywordflow">for</span> i <span class="keywordflow">in</span> range(self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#ab4ad7e2cebfbfd4c6ede9f33a659b269">no_layer</a>):
<a name="l00707"></a>00707             <span class="keywordflow">if</span> i==0:
<a name="l00708"></a>00708                 z1 = 0
<a name="l00709"></a>00709             <span class="keywordflow">else</span>:
<a name="l00710"></a>00710                 z1 = np.sum(self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a0da4da8f8723eb5fc459ffc274505d4e">z</a>[:i])
<a name="l00711"></a>00711             z2 = np.sum(self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a0da4da8f8723eb5fc459ffc274505d4e">z</a>[:i+1])
<a name="l00712"></a>00712             <span class="keywordflow">if</span> z2&gt;Rd:
<a name="l00713"></a>00713                 z2 = Rd
<a name="l00714"></a>00714             <span class="keywordflow">if</span> z1&gt;z2:
<a name="l00715"></a>00715                 z1 = z2
<a name="l00716"></a>00716             
<a name="l00717"></a>00717             r_density[i] = np.exp(-z1/Lrd) - np.exp(-z2/Lrd)
<a name="l00718"></a>00718         r_density = r_density/( 1 - np.exp(-Rd/Lrd) )
<a name="l00719"></a>00719         
<a name="l00720"></a>00720         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#ae39712893505e7cdcde97c8cbb7204b7">r_density</a> = r_density
<a name="l00721"></a>00721         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a606f96e5813d4156947092f6dfa34ece">AT</a> = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#aa041653a0ec67458843be62a2f35ba5d">RZSMI</a>*r_density*self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a8a2679444722f4c3044c227074f3c6b7">trans</a>
<a name="l00722"></a>00722     
<a name="l00723"></a>00723 
<a name="l00724"></a>00724     <span class="keyword">def </span>_shp(self, theta,i):
<a name="l00725"></a>00725         <span class="stringliteral">&quot;&quot;&quot;</span>
<a name="l00726"></a>00726 <span class="stringliteral">        soil hydraulic properties module</span>
<a name="l00727"></a>00727 <span class="stringliteral">        i is the layer</span>
<a name="l00728"></a>00728 <span class="stringliteral">        &quot;&quot;&quot;</span>
<a name="l00729"></a>00729         
<a name="l00730"></a>00730         qr = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a50adabdfa73c08c5ba2d754ea71b6035">soil_par</a>[<span class="stringliteral">&#39;qr&#39;</span>]*np.exp(-self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a510e51fb8e07c922d377216e67e467b1">mid_z</a>[i]/self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a50adabdfa73c08c5ba2d754ea71b6035">soil_par</a>[<span class="stringliteral">&#39;fl&#39;</span>])
<a name="l00731"></a>00731         f = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a50adabdfa73c08c5ba2d754ea71b6035">soil_par</a>[<span class="stringliteral">&#39;f&#39;</span>]*np.exp(-self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a510e51fb8e07c922d377216e67e467b1">mid_z</a>[i]/self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a50adabdfa73c08c5ba2d754ea71b6035">soil_par</a>[<span class="stringliteral">&#39;fl&#39;</span>])
<a name="l00732"></a>00732         a = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a50adabdfa73c08c5ba2d754ea71b6035">soil_par</a>[<span class="stringliteral">&#39;a&#39;</span>]
<a name="l00733"></a>00733         n = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a50adabdfa73c08c5ba2d754ea71b6035">soil_par</a>[<span class="stringliteral">&#39;n&#39;</span>]
<a name="l00734"></a>00734         Ks = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a50adabdfa73c08c5ba2d754ea71b6035">soil_par</a>[<span class="stringliteral">&#39;Ks&#39;</span>]
<a name="l00735"></a>00735         l = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a50adabdfa73c08c5ba2d754ea71b6035">soil_par</a>[<span class="stringliteral">&#39;l&#39;</span>]
<a name="l00736"></a>00736         
<a name="l00737"></a>00737         m = 1-1/n
<a name="l00738"></a>00738         Se = (theta-qr)/(f - qr)
<a name="l00739"></a>00739         <span class="keywordflow">if</span> Se&gt;=0.99:
<a name="l00740"></a>00740             Se = 0.99
<a name="l00741"></a>00741         <span class="keywordflow">elif</span> Se&lt;=0.01:
<a name="l00742"></a>00742             Se = 0.01
<a name="l00743"></a>00743         K = Ks*Se**l*(1-(1-Se**(1/m))**m)**2
<a name="l00744"></a>00744         D = K/(a*(f-qr)*m*n*(Se**(1/m+1))*(Se**(-1/m)-1)**m)
<a name="l00745"></a>00745         <span class="keywordflow">return</span> K, D
<a name="l00746"></a>00746     
<a name="l00747"></a>00747     <span class="keyword">def </span>_surface_storage_fun(self):
<a name="l00748"></a>00748         <span class="stringliteral">&quot;&quot;&quot;</span>
<a name="l00749"></a>00749 <span class="stringliteral">        this module stores the surface water</span>
<a name="l00750"></a><a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a26651b3b17fb5dfe01f09b7d88842466">00750</a> <span class="stringliteral">        and give as recharge to the groundwater model</span>
<a name="l00751"></a>00751 <span class="stringliteral">        &quot;&quot;&quot;</span>
<a name="l00752"></a>00752         <span class="comment"># update the storage based on the surface and hortonian runoff</span>
<a name="l00753"></a>00753         surface_storage = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a5b4eab358263189999e5f6c051a3c5cb">surface_storage</a>[self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a964b143e81cb0e3b7dca89db3770f5af">t</a>] \
<a name="l00754"></a>00754                                             + self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a7bd80cc9062cf9b95f2966a6e59ee4eb">runoff_cur</a> \
<a name="l00755"></a>00755                                             + self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a9836fdfee8b087ba3cbc882179db120e">horton_runoff</a>[self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a964b143e81cb0e3b7dca89db3770f5af">t</a>]
<a name="l00756"></a>00756         a = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#ad7c8090d53940fb47a842f4c3ec4c008">surface_storage_par</a>[<span class="stringliteral">&#39;a&#39;</span>]
<a name="l00757"></a>00757         b = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#ad7c8090d53940fb47a842f4c3ec4c008">surface_storage_par</a>[<span class="stringliteral">&#39;b&#39;</span>]
<a name="l00758"></a>00758         Rep = a*surface_storage**b
<a name="l00759"></a>00759         
<a name="l00760"></a>00760         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a5b4eab358263189999e5f6c051a3c5cb">surface_storage</a>[self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a964b143e81cb0e3b7dca89db3770f5af">t</a>+1] = surface_storage - Rep
<a name="l00761"></a>00761         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a26651b3b17fb5dfe01f09b7d88842466">Rep</a> = Rep                
<a name="l00762"></a>00762         
<a name="l00763"></a>00763 
<a name="l00764"></a>00764     <span class="keyword">def </span>_gw_fun(self):
<a name="l00765"></a>00765         <span class="stringliteral">&quot;&quot;&quot;</span>
<a name="l00766"></a><a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#af43474d2619d524ef5ca8076e930a42f">00766</a> <span class="stringliteral">        Groundwater module</span>
<a name="l00767"></a>00767 <span class="stringliteral">        &quot;&quot;&quot;</span>
<a name="l00768"></a>00768         F = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#ab832e29a07433d3f2b2d5ac4cfb0b7e6">gw_par</a>[<span class="stringliteral">&#39;F&#39;</span>]
<a name="l00769"></a>00769         G = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#ab832e29a07433d3f2b2d5ac4cfb0b7e6">gw_par</a>[<span class="stringliteral">&#39;G&#39;</span>]
<a name="l00770"></a>00770         hmin = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#ab832e29a07433d3f2b2d5ac4cfb0b7e6">gw_par</a>[<span class="stringliteral">&#39;hmin&#39;</span>]
<a name="l00771"></a>00771         
<a name="l00772"></a>00772         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#af43474d2619d524ef5ca8076e930a42f">sy</a> = F/G
<a name="l00773"></a>00773         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#ad0d391f0251e19d5b61ddbab1120f5f8">lam</a> = (1-F)*self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#af43474d2619d524ef5ca8076e930a42f">sy</a>
<a name="l00774"></a>00774         
<a name="l00775"></a>00775         <span class="comment"># net input = recharge - discharge</span>
<a name="l00776"></a>00776         u = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a69ce28df534af85dfef7981b90b2dcad">recharge</a>[self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a964b143e81cb0e3b7dca89db3770f5af">t</a>]-self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a4aa6481e03a36b7aafc17181a1efd931">pumping_cur</a> + self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a26651b3b17fb5dfe01f09b7d88842466">Rep</a>
<a name="l00777"></a>00777         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a2942f4c699f86925e90f81911b0c9f23">gw_level</a>[self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a964b143e81cb0e3b7dca89db3770f5af">t</a>+1] = F*(self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a2942f4c699f86925e90f81911b0c9f23">gw_level</a>[self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a964b143e81cb0e3b7dca89db3770f5af">t</a>]-hmin) + G*u + hmin
<a name="l00778"></a>00778         
<a name="l00779"></a>00779         dzn = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a2942f4c699f86925e90f81911b0c9f23">gw_level</a>[self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a964b143e81cb0e3b7dca89db3770f5af">t</a>+1] - self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a2942f4c699f86925e90f81911b0c9f23">gw_level</a>[self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a964b143e81cb0e3b7dca89db3770f5af">t</a>] 
<a name="l00780"></a>00780         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a36a928febfe36732212d727df62d90da">discharge</a> = u - self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#af43474d2619d524ef5ca8076e930a42f">sy</a>*(dzn) <span class="comment"># simulated discharge</span>
<a name="l00781"></a>00781         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a0da4da8f8723eb5fc459ffc274505d4e">z</a>[-1] = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a0da4da8f8723eb5fc459ffc274505d4e">z</a>[-1] - dzn
<a name="l00782"></a>00782         <span class="comment">#if self.t&lt;30:</span>
<a name="l00783"></a>00783         <span class="comment">#    print self.recharge[self.t]</span>
<a name="l00784"></a>00784         <span class="comment">#    print self.z[-1]</span>
<a name="l00785"></a>00785                                    
<a name="l00786"></a>00786         
<a name="l00787"></a>00787         
<a name="l00788"></a>00788     <span class="keyword">def </span>_write_output(self):
<a name="l00789"></a>00789         <span class="stringliteral">&quot;&quot;&quot;</span>
<a name="l00790"></a>00790 <span class="stringliteral">        This will write the data in the xls format</span>
<a name="l00791"></a>00791 <span class="stringliteral">        </span>
<a name="l00792"></a>00792 <span class="stringliteral">        &quot;&quot;&quot;</span>
<a name="l00793"></a>00793         <span class="comment"># open the xls workbook</span>
<a name="l00794"></a>00794         wbk = xlwt.Workbook()
<a name="l00795"></a>00795         sheet = wbk.add_sheet(<span class="stringliteral">&#39;variables&#39;</span>)
<a name="l00796"></a>00796         <span class="comment"># write the header</span>
<a name="l00797"></a>00797         sheet.write(0,0,<span class="stringliteral">&#39;year&#39;</span>)
<a name="l00798"></a>00798         sheet.write(0,1,<span class="stringliteral">&#39;doy&#39;</span>)
<a name="l00799"></a>00799         sheet.write(0,2,<span class="stringliteral">&#39;gw level&#39;</span>)
<a name="l00800"></a>00800         <span class="keywordflow">for</span> i <span class="keywordflow">in</span> range(self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#ab4ad7e2cebfbfd4c6ede9f33a659b269">no_layer</a>):
<a name="l00801"></a>00801             sheet.write(0,3+i,<span class="stringliteral">&#39;SM - %i&#39;</span>%(i+1))
<a name="l00802"></a>00802         <span class="comment"># write the data    </span>
<a name="l00803"></a>00803         <span class="keywordflow">for</span> i <span class="keywordflow">in</span> range(self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#afb823e4e81c242a01d9eb8dd72d9d71b" title="run the model ########################">max_t</a>):
<a name="l00804"></a>00804             sheet.write(i+1,0,self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#acbfdcb3e1ad97816390b787e9e3f97e0">year</a>[i])
<a name="l00805"></a>00805             sheet.write(i+1,1,self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a983f6b20a553b5dcf084afd98d09e373">doy</a>[i])
<a name="l00806"></a>00806             sheet.write(i+1,2,self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a2942f4c699f86925e90f81911b0c9f23">gw_level</a>[i])
<a name="l00807"></a>00807             <span class="keywordflow">for</span> j <span class="keywordflow">in</span> range(self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#ab4ad7e2cebfbfd4c6ede9f33a659b269">no_layer</a>):
<a name="l00808"></a>00808                 sheet.write(i+1,3+j,self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a08fb52fecd1da4174c3396e531f3285a">sm</a>[j,i])
<a name="l00809"></a>00809         
<a name="l00810"></a>00810         sheet = wbk.add_sheet(<span class="stringliteral">&#39;flux&#39;</span>)
<a name="l00811"></a>00811         <span class="comment"># write the header</span>
<a name="l00812"></a>00812         sheet.write(0,0,<span class="stringliteral">&#39;year&#39;</span>)
<a name="l00813"></a>00813         sheet.write(0,1,<span class="stringliteral">&#39;doy&#39;</span>)
<a name="l00814"></a>00814         sheet.write(0,2,<span class="stringliteral">&#39;rain&#39;</span>)
<a name="l00815"></a>00815         sheet.write(0,3,<span class="stringliteral">&#39;PET&#39;</span>)
<a name="l00816"></a>00816         sheet.write(0,4,<span class="stringliteral">&#39;lai&#39;</span>)
<a name="l00817"></a>00817         sheet.write(0,5,<span class="stringliteral">&#39;pumping&#39;</span>)
<a name="l00818"></a>00818         sheet.write(0,6,<span class="stringliteral">&#39;actual evap&#39;</span>)
<a name="l00819"></a>00819         sheet.write(0,7,<span class="stringliteral">&#39;actual trans&#39;</span>)
<a name="l00820"></a>00820         sheet.write(0,8,<span class="stringliteral">&#39;E_In&#39;</span>)
<a name="l00821"></a>00821         sheet.write(0,9,<span class="stringliteral">&#39;AET&#39;</span>)
<a name="l00822"></a>00822         sheet.write(0,10,<span class="stringliteral">&#39;recharge&#39;</span>)
<a name="l00823"></a>00823         sheet.write(0,11,<span class="stringliteral">&#39;runoff&#39;</span>)
<a name="l00824"></a>00824         
<a name="l00825"></a>00825         <span class="comment"># write the data    </span>
<a name="l00826"></a>00826         <span class="keywordflow">for</span> i <span class="keywordflow">in</span> range(self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#afb823e4e81c242a01d9eb8dd72d9d71b" title="run the model ########################">max_t</a>):
<a name="l00827"></a>00827             sheet.write(i+1,0,self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#acbfdcb3e1ad97816390b787e9e3f97e0">year</a>[i])
<a name="l00828"></a>00828             sheet.write(i+1,1,self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a983f6b20a553b5dcf084afd98d09e373">doy</a>[i])
<a name="l00829"></a>00829             sheet.write(i+1,2,self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a96096ac6208cf704c21c8b34095bb6e5">rain</a>[i])
<a name="l00830"></a>00830             sheet.write(i+1,3,self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#afd32a65f25fe5d1efb5479c05f3b5534">pet</a>[i])
<a name="l00831"></a>00831             sheet.write(i+1,4,self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a209ba87f445e69bac71538ac85baf5c7">lai</a>[i])
<a name="l00832"></a>00832             sheet.write(i+1,5,self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#afd94ae04654768dfbe327f5d0224ec9c">pumping</a>[i])
<a name="l00833"></a>00833             sheet.write(i+1,6,self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#acd5dcc28478c407c7657e51117566629">actual_evap</a>[i])
<a name="l00834"></a>00834             sheet.write(i+1,7,self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a9c0472e31b5748e4a9e719a8b1539440">actual_trans</a>[i])
<a name="l00835"></a>00835             sheet.write(i+1,8,self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a03e7b35599db36f25f04205462504f70">E_In</a>[i])
<a name="l00836"></a>00836             sheet.write(i+1,9,self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#acd5dcc28478c407c7657e51117566629">actual_evap</a>[i]+self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a9c0472e31b5748e4a9e719a8b1539440">actual_trans</a>[i]+self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a03e7b35599db36f25f04205462504f70">E_In</a>[i])
<a name="l00837"></a>00837             sheet.write(i+1,10,self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a69ce28df534af85dfef7981b90b2dcad">recharge</a>[i])
<a name="l00838"></a>00838             sheet.write(i+1,11,self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#acc1b1f528d44d2163dbacd614e13fc20">runoff</a>[i])
<a name="l00839"></a>00839             
<a name="l00840"></a>00840         wbk.save(self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#a9f9dab93516338236b99a5fd96d708cb">ofile_name</a>)
<a name="l00841"></a>00841         
<a name="l00842"></a>00842         output_message = <span class="stringliteral">&#39;Output data writting completed sucessfully&#39;</span>
<a name="l00843"></a>00843         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html#afe1a6e68e8787346dc7a6db2e5aa3e4f">_colored_output</a>(output_message, 32)
<a name="l00844"></a>00844         
<a name="l00845"></a>00845 
<a name="l00846"></a><a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html">00846</a> <span class="keyword">class </span><a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html">CSGLM_ENKF</a>(<a class="code" href="classambhas_1_1csglm_1_1CSGLM.html">CSGLM</a>):
<a name="l00847"></a>00847     <span class="stringliteral">&quot;&quot;&quot;</span>
<a name="l00848"></a>00848 <span class="stringliteral">    This is the main class of the Ensemble Kalman Filter (EnKF)</span>
<a name="l00849"></a>00849 <span class="stringliteral">    coupled with the CSGLM model. The model is given in the class CSGLM.</span>
<a name="l00850"></a>00850 <span class="stringliteral">        </span>
<a name="l00851"></a>00851 <span class="stringliteral">    This will read the input data,</span>
<a name="l00852"></a>00852 <span class="stringliteral">    do the processing</span>
<a name="l00853"></a>00853 <span class="stringliteral">    and then write the output files</span>
<a name="l00854"></a>00854 <span class="stringliteral">    </span>
<a name="l00855"></a>00855 <span class="stringliteral">    &quot;&quot;&quot;</span>
<a name="l00856"></a>00856     
<a name="l00857"></a><a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#ab0c675ac2722a543961253d9feacc9f7">00857</a>     <span class="keyword">def </span><a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#ab0c675ac2722a543961253d9feacc9f7">__init__</a>(self,input_file):
<a name="l00858"></a>00858         <span class="stringliteral">&quot;&quot;&quot;</span>
<a name="l00859"></a>00859 <span class="stringliteral">        Input:</span>
<a name="l00860"></a>00860 <span class="stringliteral">            input_file: the file which contains all the information</span>
<a name="l00861"></a><a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a2a903a1d70e0c5d8a38c15a3e976a3d3">00861</a> <span class="stringliteral">            including forcing and parameters.</span>
<a name="l00862"></a><a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a2e276ede84b8117f170836a18bff3d62">00862</a> <span class="stringliteral">        &quot;&quot;&quot;</span>      
<a name="l00863"></a>00863         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a98d023b5ac919bd04b192860be82aa4b">input_file</a> = input_file
<a name="l00864"></a>00864         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a2a903a1d70e0c5d8a38c15a3e976a3d3">n_ens</a> = 10
<a name="l00865"></a>00865         <span class="comment"># read the input data</span>
<a name="l00866"></a>00866         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a6ca1c6fea7133c57bbb2f2d9eef2814d">_read_input</a>()
<a name="l00867"></a>00867         
<a name="l00868"></a>00868         <span class="comment"># initialize the variables and output file</span>
<a name="l00869"></a>00869         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a4a298cdf43232bb56f031ba4a016562b">initialize</a>()
<a name="l00870"></a>00870         
<a name="l00871"></a>00871         <span class="comment">################ run the model ########################</span>
<a name="l00872"></a>00872         <span class="keywordflow">for</span> t <span class="keywordflow">in</span> range(self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#ac0b3fb72cd919d7fc846ce91e5fc7533" title="run the model ########################">max_t</a>):
<a name="l00873"></a>00873             self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a2e276ede84b8117f170836a18bff3d62" title="run the model ########################">t</a> = t
<a name="l00874"></a>00874               
<a name="l00875"></a>00875             <span class="comment"># get forcing data at current time step        </span>
<a name="l00876"></a>00876             self._get_forcing()
<a name="l00877"></a>00877             
<a name="l00878"></a>00878             <span class="comment"># perturb the soil par ensemble</span>
<a name="l00879"></a>00879             self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a26133c1c7891a3618878c44d4c319c70">_perturb_soil_par_ens</a>()
<a name="l00880"></a>00880                         
<a name="l00881"></a>00881             <span class="comment"># call the unsat module with ensemble</span>
<a name="l00882"></a>00882             <span class="keywordflow">for</span> ens <span class="keywordflow">in</span> range(self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a2a903a1d70e0c5d8a38c15a3e976a3d3">n_ens</a>):
<a name="l00883"></a>00883                 self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#aca1e8b85661bf974043c2003b97bd658">ens</a> = ens
<a name="l00884"></a>00884                 
<a name="l00885"></a>00885                 <span class="comment"># call the interception module</span>
<a name="l00886"></a>00886                 self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a8ffd4634ada3f1e78a5df519f4d463d3">_interception_ens_fun</a>()
<a name="l00887"></a>00887                 
<a name="l00888"></a>00888                 <span class="comment"># call the runoff module</span>
<a name="l00889"></a>00889                 self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#ac104b53eab326d37474166412163d56c">_runoff_ens_fun</a>()
<a name="l00890"></a>00890                 
<a name="l00891"></a>00891                 <span class="comment"># call the soil module</span>
<a name="l00892"></a>00892                 self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a943f4532626121bb93de70aae7b53b16">_soil_ens_fun</a>()
<a name="l00893"></a>00893                 
<a name="l00894"></a>00894                 <span class="comment"># call the surface storage module</span>
<a name="l00895"></a>00895                 self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a5804b018868759f618e4c1e67e29b122">_surface_storage_ens_fun</a>()
<a name="l00896"></a>00896                 
<a name="l00897"></a>00897                 <span class="comment"># call the goundwater module</span>
<a name="l00898"></a>00898                 self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a57fe796506e36ec3011146ca59f58ae7">_gw_ens_fun</a>()
<a name="l00899"></a>00899         
<a name="l00900"></a>00900                 
<a name="l00901"></a>00901             <span class="comment"># ensemble kalmfan filter</span>
<a name="l00902"></a>00902             self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a03651f2ec96dcf995aed84c645104f7a">_enkf_par</a>()
<a name="l00903"></a>00903 
<a name="l00904"></a>00904             self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a7169f3eaf37be4d18283065c0221967e">_enkf_ET</a>()
<a name="l00905"></a>00905             
<a name="l00906"></a>00906             self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a2d9d681fde83a09ce5b3b30e8b751ea6">_write_output</a>()                
<a name="l00907"></a>00907                 
<a name="l00908"></a>00908                 
<a name="l00909"></a>00909         self.nc_file.close() <span class="comment"># close the output file</span>
<a name="l00910"></a>00910 
<a name="l00911"></a>00911 
<a name="l00912"></a><a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a4a298cdf43232bb56f031ba4a016562b">00912</a>     <span class="keyword">def </span><a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a4a298cdf43232bb56f031ba4a016562b">initialize</a>(self):
<a name="l00913"></a>00913         <span class="stringliteral">&quot;&quot;&quot;</span>
<a name="l00914"></a>00914 <span class="stringliteral">        this initializes all the required variables</span>
<a name="l00915"></a>00915 <span class="stringliteral">        and open the netcdf file for writting</span>
<a name="l00916"></a><a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#af12aee8cdd055057446b101b6c53f0b2">00916</a> <span class="stringliteral">        also generates the initial ensemble of the soil hydraulic parameters</span>
<a name="l00917"></a>00917 <span class="stringliteral">        &quot;&quot;&quot;</span>
<a name="l00918"></a>00918         max_t = int(self.final_time/self.dt)
<a name="l00919"></a>00919         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#ac0b3fb72cd919d7fc846ce91e5fc7533" title="run the model ########################">max_t</a> = max_t                       
<a name="l00920"></a>00920         
<a name="l00921"></a>00921         <span class="comment">#initialize variables</span>
<a name="l00922"></a>00922         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#af12aee8cdd055057446b101b6c53f0b2">surface_storage_ens</a> = np.zeros((self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a2a903a1d70e0c5d8a38c15a3e976a3d3">n_ens</a>, self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#ac0b3fb72cd919d7fc846ce91e5fc7533" title="run the model ########################">max_t</a>+1))   
<a name="l00923"></a>00923         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a66efa37befe06bcf214daec41aec38da">gw_level_ens</a> = np.zeros((self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a2a903a1d70e0c5d8a38c15a3e976a3d3">n_ens</a>, self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#ac0b3fb72cd919d7fc846ce91e5fc7533" title="run the model ########################">max_t</a>+1))
<a name="l00924"></a>00924         
<a name="l00925"></a>00925         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a66efa37befe06bcf214daec41aec38da">gw_level_ens</a>[:,0] = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a5ef8efa68549b0938e61a17809966bf1">initial_gwl</a>
<a name="l00926"></a>00926         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#ab6bee74b491c69096614664515497199">sm_ens</a> = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#af058e03d7e7af6e10f48add951bf397e">initial_sm</a> + 0.02*np.random.normal(size=(self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a2a903a1d70e0c5d8a38c15a3e976a3d3">n_ens</a>,self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a7700d8f689b1796fa34e490e5b16753d">no_layer</a>))
<a name="l00927"></a>00927         
<a name="l00928"></a>00928         <span class="comment"># open file for writing</span>
<a name="l00929"></a>00929         file = nc.NetCDFFile(self.ofile_name, <span class="stringliteral">&#39;w&#39;</span>)
<a name="l00930"></a>00930         setattr(file, <span class="stringliteral">&#39;title&#39;</span>, <span class="stringliteral">&#39;output of the model ambhas.csglm_enkf&#39;</span>)
<a name="l00931"></a>00931         now = datetime.datetime.now()
<a name="l00932"></a>00932         setattr(file, <span class="stringliteral">&#39;description&#39;</span>, <span class="stringliteral">&#39;The model was run at %s&#39;</span>%(now.ctime()))
<a name="l00933"></a>00933         file.createDimension(<span class="stringliteral">&#39;depth&#39;</span>, self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a7700d8f689b1796fa34e490e5b16753d">no_layer</a>)
<a name="l00934"></a>00934         file.createDimension(<span class="stringliteral">&#39;time&#39;</span>, self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#ac0b3fb72cd919d7fc846ce91e5fc7533" title="run the model ########################">max_t</a>+1)
<a name="l00935"></a>00935         file.createDimension(<span class="stringliteral">&#39;ensemble&#39;</span>, self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a2a903a1d70e0c5d8a38c15a3e976a3d3">n_ens</a>)
<a name="l00936"></a>00936         
<a name="l00937"></a>00937         <span class="comment"># depth</span>
<a name="l00938"></a>00938         varDims = <span class="stringliteral">&#39;depth&#39;</span>,
<a name="l00939"></a>00939         depth = file.createVariable(<span class="stringliteral">&#39;depth&#39;</span>, <span class="stringliteral">&#39;d&#39;</span>, varDims)
<a name="l00940"></a>00940         depth.units = <span class="stringliteral">&#39;m&#39;</span>
<a name="l00941"></a>00941         depth[:] = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#ab38281ca276abcbc9b5faa41207c024c">z</a>
<a name="l00942"></a>00942         
<a name="l00943"></a>00943         <span class="comment"># time (year and doy)</span>
<a name="l00944"></a>00944         varDims = <span class="stringliteral">&#39;time&#39;</span>,
<a name="l00945"></a>00945         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a0cb50e5203ec570c5f7c5d12bb12c71c">nc_year</a> = file.createVariable(<span class="stringliteral">&#39;year&#39;</span>, <span class="stringliteral">&#39;d&#39;</span>, varDims)
<a name="l00946"></a>00946         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a5cada20c173c8735df488f79ef181f8c">nc_doy</a> = file.createVariable(<span class="stringliteral">&#39;doy&#39;</span>, <span class="stringliteral">&#39;d&#39;</span>, varDims)
<a name="l00947"></a>00947         
<a name="l00948"></a>00948         <span class="comment"># soil moisture</span>
<a name="l00949"></a>00949         varDims = <span class="stringliteral">&#39;ensemble&#39;</span>, <span class="stringliteral">&#39;depth&#39;</span>, <span class="stringliteral">&#39;time&#39;</span>
<a name="l00950"></a>00950         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a3406312c789fc4adee65cc46fe6003c3">nc_sm</a> = file.createVariable(<span class="stringliteral">&#39;sm&#39;</span>,<span class="stringliteral">&#39;d&#39;</span>, varDims)
<a name="l00951"></a>00951         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a3406312c789fc4adee65cc46fe6003c3">nc_sm</a>.units = <span class="stringliteral">&#39;v/v&#39;</span>
<a name="l00952"></a>00952         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a3406312c789fc4adee65cc46fe6003c3">nc_sm</a>[:,:,0] = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#ab6bee74b491c69096614664515497199">sm_ens</a>
<a name="l00953"></a>00953         
<a name="l00954"></a>00954         <span class="comment"># recharge, aet </span>
<a name="l00955"></a>00955         varDims = <span class="stringliteral">&#39;time&#39;</span>,
<a name="l00956"></a>00956         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a7546c4a94dbe7964c2e0671b501dd042">nc_aet</a> = file.createVariable(<span class="stringliteral">&#39;aet&#39;</span>,<span class="stringliteral">&#39;d&#39;</span>,varDims)
<a name="l00957"></a>00957         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a7546c4a94dbe7964c2e0671b501dd042">nc_aet</a>.units = <span class="stringliteral">&#39;mm&#39;</span>
<a name="l00958"></a>00958         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#ad8f95be60d30258cde1906e4292490f9">nc_recharge</a> = file.createVariable(<span class="stringliteral">&#39;recharge&#39;</span>,<span class="stringliteral">&#39;d&#39;</span>,varDims)
<a name="l00959"></a>00959         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#ad8f95be60d30258cde1906e4292490f9">nc_recharge</a>.units = <span class="stringliteral">&#39;mm&#39;</span>
<a name="l00960"></a>00960         
<a name="l00961"></a>00961         <span class="comment"># gw level</span>
<a name="l00962"></a>00962         varDims = <span class="stringliteral">&#39;ensemble&#39;</span>, <span class="stringliteral">&#39;time&#39;</span>
<a name="l00963"></a>00963         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a2b57e60b15e4323ddd1c4cbf857a15d5">nc_gw_level_ens</a> = file.createVariable(<span class="stringliteral">&#39;gw_level_ens&#39;</span>,<span class="stringliteral">&#39;d&#39;</span>,varDims)
<a name="l00964"></a>00964         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a2b57e60b15e4323ddd1c4cbf857a15d5">nc_gw_level_ens</a>.units = <span class="stringliteral">&#39;m&#39;</span>
<a name="l00965"></a>00965         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a2b57e60b15e4323ddd1c4cbf857a15d5">nc_gw_level_ens</a>[:,0] = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a66efa37befe06bcf214daec41aec38da">gw_level_ens</a>[:,0]
<a name="l00966"></a>00966         
<a name="l00967"></a>00967         <span class="comment"># soil hydraulic parameters</span>
<a name="l00968"></a>00968         varDims = <span class="stringliteral">&#39;ensemble&#39;</span>,<span class="stringliteral">&#39;time&#39;</span>
<a name="l00969"></a>00969         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a12203c67c9a8aa953a1ad100ede8abac">nc_qr</a> = file.createVariable(<span class="stringliteral">&#39;qr&#39;</span>,<span class="stringliteral">&#39;d&#39;</span>,varDims)
<a name="l00970"></a>00970         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a12203c67c9a8aa953a1ad100ede8abac">nc_qr</a>.units = <span class="stringliteral">&#39;v/v&#39;</span>
<a name="l00971"></a>00971         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a08eb4f220a016618bef416cc0b3f8246">nc_f</a> = file.createVariable(<span class="stringliteral">&#39;f&#39;</span>,<span class="stringliteral">&#39;d&#39;</span>,varDims)
<a name="l00972"></a>00972         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a08eb4f220a016618bef416cc0b3f8246">nc_f</a>.units = <span class="stringliteral">&#39;v/v&#39;</span>    
<a name="l00973"></a>00973         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a9368f37ca29640732331c236e735c69e">nc_a</a> = file.createVariable(<span class="stringliteral">&#39;a&#39;</span>,<span class="stringliteral">&#39;d&#39;</span>,varDims)
<a name="l00974"></a>00974         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a9368f37ca29640732331c236e735c69e">nc_a</a>.units = <span class="stringliteral">&#39;1/m&#39;</span>
<a name="l00975"></a>00975         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a4998f7fd52fa1630bbd23b3688ca1198">nc_n</a> = file.createVariable(<span class="stringliteral">&#39;n&#39;</span>,<span class="stringliteral">&#39;d&#39;</span>,varDims)
<a name="l00976"></a>00976         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a4998f7fd52fa1630bbd23b3688ca1198">nc_n</a>.units = <span class="stringliteral">&#39;-&#39;</span> 
<a name="l00977"></a>00977         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a00c481fab192e15241bcb3db90ea76b3">nc_Ks</a> = file.createVariable(<span class="stringliteral">&#39;Ks&#39;</span>,<span class="stringliteral">&#39;d&#39;</span>,varDims)
<a name="l00978"></a>00978         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a00c481fab192e15241bcb3db90ea76b3">nc_Ks</a>.units = <span class="stringliteral">&#39;m/s&#39;</span>
<a name="l00979"></a>00979         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a6f043d6e8e1a5f4d1d65088ce8a477be">nc_l</a> = file.createVariable(<span class="stringliteral">&#39;l&#39;</span>,<span class="stringliteral">&#39;d&#39;</span>,varDims)
<a name="l00980"></a>00980         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a6f043d6e8e1a5f4d1d65088ce8a477be">nc_l</a>.units = <span class="stringliteral">&#39;-&#39;</span> 
<a name="l00981"></a>00981         
<a name="l00982"></a>00982         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a3e640baa3d1ba0ed2649987f8aace6c3">nc_file</a> = file
<a name="l00983"></a>00983         
<a name="l00984"></a>00984         <span class="comment"># generate soil hydraulic parameters</span>
<a name="l00985"></a>00985         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a8e65bac0658173daa3eb12da8a13418d">_generate_soil_par_ens</a>()
<a name="l00986"></a>00986         
<a name="l00987"></a>00987         
<a name="l00988"></a>00988 
<a name="l00989"></a>00989     <span class="keyword">def </span>_generate_soil_par_ens(self):
<a name="l00990"></a>00990         <span class="stringliteral">&quot;&quot;&quot;</span>
<a name="l00991"></a>00991 <span class="stringliteral">        this uses the LHS to generate the ensemble of the parameters</span>
<a name="l00992"></a>00992 <span class="stringliteral">        </span>
<a name="l00993"></a>00993 <span class="stringliteral">        this also computes the perturbation needed to perturb the parameters</span>
<a name="l00994"></a><a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a6315831a8018352dc74d66d5002b5287">00994</a> <span class="stringliteral">        which is done in another function</span>
<a name="l00995"></a>00995 <span class="stringliteral">        &quot;&quot;&quot;</span>
<a name="l00996"></a>00996                
<a name="l00997"></a>00997         <span class="comment">#gaussian perturbation</span>
<a name="l00998"></a>00998         v = np.random.normal(size=(self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a2a903a1d70e0c5d8a38c15a3e976a3d3">n_ens</a>,6))
<a name="l00999"></a>00999         v = v-np.tile(v.mean(axis=0),(self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a2a903a1d70e0c5d8a38c15a3e976a3d3">n_ens</a>,1))
<a name="l01000"></a>01000         qr = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#af81ae7a5cd5fe5ce64a3fb356b3a3827">shp_ens</a>[<span class="stringliteral">&#39;qr&#39;</span>]  + v[:,0]*self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#af81ae7a5cd5fe5ce64a3fb356b3a3827">shp_ens</a>[<span class="stringliteral">&#39;qr&#39;</span>]*0.1
<a name="l01001"></a>01001         f = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#af81ae7a5cd5fe5ce64a3fb356b3a3827">shp_ens</a>[<span class="stringliteral">&#39;f&#39;</span>]  + v[:,1]*self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#af81ae7a5cd5fe5ce64a3fb356b3a3827">shp_ens</a>[<span class="stringliteral">&#39;f&#39;</span>]*0.1
<a name="l01002"></a>01002         a = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#af81ae7a5cd5fe5ce64a3fb356b3a3827">shp_ens</a>[<span class="stringliteral">&#39;a&#39;</span>]    + v[:,2]*self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#af81ae7a5cd5fe5ce64a3fb356b3a3827">shp_ens</a>[<span class="stringliteral">&#39;a&#39;</span>]*0.1
<a name="l01003"></a>01003         n = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#af81ae7a5cd5fe5ce64a3fb356b3a3827">shp_ens</a>[<span class="stringliteral">&#39;n&#39;</span>]            + v[:,3]*self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#af81ae7a5cd5fe5ce64a3fb356b3a3827">shp_ens</a>[<span class="stringliteral">&#39;n&#39;</span>]*0.1
<a name="l01004"></a>01004         Ks = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#af81ae7a5cd5fe5ce64a3fb356b3a3827">shp_ens</a>[<span class="stringliteral">&#39;Ks&#39;</span>]          + v[:,4]*self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#af81ae7a5cd5fe5ce64a3fb356b3a3827">shp_ens</a>[<span class="stringliteral">&#39;Ks&#39;</span>]*0.1
<a name="l01005"></a>01005         l = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#af81ae7a5cd5fe5ce64a3fb356b3a3827">shp_ens</a>[<span class="stringliteral">&#39;l&#39;</span>]            + v[:,5]*self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#af81ae7a5cd5fe5ce64a3fb356b3a3827">shp_ens</a>[<span class="stringliteral">&#39;l&#39;</span>]*0.1
<a name="l01006"></a>01006 
<a name="l01007"></a>01007         <span class="comment"># check for the range of generated parameters</span>
<a name="l01008"></a>01008         qr[qr&gt;self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a74460781304be9b1a9e1091fe9ac8542">qr_max</a>] = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a74460781304be9b1a9e1091fe9ac8542">qr_max</a>
<a name="l01009"></a>01009         f[f&gt;self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a2bd0a9dada37b2589cbbfce6bdad34a3">f_max</a>] = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a2bd0a9dada37b2589cbbfce6bdad34a3">f_max</a>
<a name="l01010"></a>01010         a[a&gt;self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a266e05adb9a9eb932be1aa21cce0abd7">a_max</a>] = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a266e05adb9a9eb932be1aa21cce0abd7">a_max</a>
<a name="l01011"></a>01011         n[n&gt;self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#aeaa84b633b369cf4775bba57b80e4720">n_max</a>] = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#aeaa84b633b369cf4775bba57b80e4720">n_max</a>
<a name="l01012"></a>01012         Ks[Ks&gt;self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#ae4ccf5d8e2104971b4605834468b6fd1">Ks_max</a>] = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#ae4ccf5d8e2104971b4605834468b6fd1">Ks_max</a>
<a name="l01013"></a>01013         l[l&gt;self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a38302a6260964bcd1911079381d5e243">l_max</a>] = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a38302a6260964bcd1911079381d5e243">l_max</a>
<a name="l01014"></a>01014         
<a name="l01015"></a>01015         qr[qr&lt;self.qr_min]  = self.qr_min
<a name="l01016"></a>01016         f[f&lt;self.f_min]  = self.f_min
<a name="l01017"></a>01017         a[a&lt;self.a_min]     = self.a_min
<a name="l01018"></a>01018         n[n&lt;self.n_min]                 = self.n_min
<a name="l01019"></a>01019         Ks[Ks&lt;self.Ks_min]              = self.Ks_min
<a name="l01020"></a>01020         l[l&lt;self.l_min]                 = self.l_min
<a name="l01021"></a>01021         
<a name="l01022"></a>01022         soil_par_ens = {}
<a name="l01023"></a>01023         soil_par_ens[<span class="stringliteral">&#39;qr&#39;</span>] = qr
<a name="l01024"></a>01024         soil_par_ens[<span class="stringliteral">&#39;f&#39;</span>] = f
<a name="l01025"></a>01025         soil_par_ens[<span class="stringliteral">&#39;a&#39;</span>] = a
<a name="l01026"></a>01026         soil_par_ens[<span class="stringliteral">&#39;n&#39;</span>] = n
<a name="l01027"></a>01027         soil_par_ens[<span class="stringliteral">&#39;Ks&#39;</span>] = Ks
<a name="l01028"></a>01028         soil_par_ens[<span class="stringliteral">&#39;l&#39;</span>] = l
<a name="l01029"></a>01029         
<a name="l01030"></a>01030         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#aa47a178931262b4026d9322d4f567436">soil_par_ens</a> = soil_par_ens
<a name="l01031"></a>01031         
<a name="l01032"></a>01032         <span class="comment">#perturbation parameter</span>
<a name="l01033"></a>01033         soil_pert = {}
<a name="l01034"></a>01034         soil_pert[<span class="stringliteral">&#39;qr&#39;</span>] = (self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a74460781304be9b1a9e1091fe9ac8542">qr_max</a> - self.qr_min)*0.1/100.0
<a name="l01035"></a>01035         soil_pert[<span class="stringliteral">&#39;f&#39;</span>] = (self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a2bd0a9dada37b2589cbbfce6bdad34a3">f_max</a> - self.f_min)*0.1/100.0
<a name="l01036"></a>01036         soil_pert[<span class="stringliteral">&#39;a&#39;</span>] =  (self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a266e05adb9a9eb932be1aa21cce0abd7">a_max</a> - self.a_min)*0.1/100.0
<a name="l01037"></a>01037         soil_pert[<span class="stringliteral">&#39;n&#39;</span>] =      (self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#aeaa84b633b369cf4775bba57b80e4720">n_max</a> - self.n_min)*0.1/100.0
<a name="l01038"></a>01038         soil_pert[<span class="stringliteral">&#39;Ks&#39;</span>] =     (self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#ae4ccf5d8e2104971b4605834468b6fd1">Ks_max</a> - self.Ks_min)*0.1/100.0
<a name="l01039"></a>01039         soil_pert[<span class="stringliteral">&#39;l&#39;</span>] =      (self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a38302a6260964bcd1911079381d5e243">l_max</a> - self.l_min)*0.1/100.0
<a name="l01040"></a>01040         
<a name="l01041"></a>01041         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a6315831a8018352dc74d66d5002b5287">soil_pert</a> = soil_pert
<a name="l01042"></a>01042 
<a name="l01043"></a>01043     <span class="keyword">def </span>_read_input(self):
<a name="l01044"></a>01044         <span class="stringliteral">&quot;&quot;&quot;</span>
<a name="l01045"></a>01045 <span class="stringliteral">        This checks if all the required input sheets are present in the xls file,</span>
<a name="l01046"></a>01046 <span class="stringliteral">        read the data from input file, which can be used later in other functions</span>
<a name="l01047"></a>01047 <span class="stringliteral">        &quot;&quot;&quot;</span>
<a name="l01048"></a>01048     
<a name="l01049"></a>01049         <span class="comment"># list of required files in the input directory</span>
<a name="l01050"></a>01050         input_sheets = [<span class="stringliteral">&#39;ind&#39;</span>, <span class="stringliteral">&#39;forcing&#39;</span>, <span class="stringliteral">&#39;initial_condition&#39;</span>, <span class="stringliteral">&#39;gw_par&#39;</span>,
<a name="l01051"></a>01051                        <span class="stringliteral">&#39;runoff_par&#39;</span>, <span class="stringliteral">&#39;units&#39;</span>, <span class="stringliteral">&#39;root_info&#39;</span>, <span class="stringliteral">&#39;temporal_info&#39;</span>,
<a name="l01052"></a>01052                        <span class="stringliteral">&#39;spatial_info&#39;</span>, <span class="stringliteral">&#39;ET_par&#39;</span>, <span class="stringliteral">&#39;soil_hyd_par&#39;</span>, <span class="stringliteral">&#39;output_par&#39;</span>]
<a name="l01053"></a>01053         
<a name="l01054"></a>01054         <span class="comment"># check if all the required sheets are present or not</span>
<a name="l01055"></a>01055         self._check_sheets(input_sheets, self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a98d023b5ac919bd04b192860be82aa4b">input_file</a>)
<a name="l01056"></a>01056         
<a name="l01057"></a>01057         <span class="comment"># read the legend</span>
<a name="l01058"></a>01058         self._read_ind()
<a name="l01059"></a>01059         
<a name="l01060"></a>01060         <span class="comment"># read the spatial data</span>
<a name="l01061"></a>01061         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a909f83f41a719201020d85766f1153f2">_read_spatial</a>()
<a name="l01062"></a>01062         
<a name="l01063"></a>01063         <span class="comment"># read the temporal data</span>
<a name="l01064"></a>01064         self._read_temporal()
<a name="l01065"></a>01065 
<a name="l01066"></a>01066         <span class="comment"># read the root distribution data</span>
<a name="l01067"></a>01067         self._read_root_distribution()
<a name="l01068"></a>01068         
<a name="l01069"></a>01069         <span class="comment"># read the units </span>
<a name="l01070"></a>01070         self._read_units()
<a name="l01071"></a>01071         
<a name="l01072"></a>01072         <span class="comment"># read the initial condition</span>
<a name="l01073"></a>01073         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a94b67e18875c0615d5eac752e04a3b84">_read_initial_condition</a>()
<a name="l01074"></a>01074         
<a name="l01075"></a>01075         <span class="comment"># read the soil hydraulic properties data</span>
<a name="l01076"></a>01076         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#adf201b177556eb3f4f043cba54ae807e">_read_shp_ens</a>()
<a name="l01077"></a>01077         
<a name="l01078"></a>01078         <span class="comment"># read the parameters related to runoff</span>
<a name="l01079"></a>01079         self._read_runoff_par()
<a name="l01080"></a>01080         
<a name="l01081"></a>01081         <span class="comment"># read the parameters related to surface storage</span>
<a name="l01082"></a>01082         self._surface_storage_par()
<a name="l01083"></a>01083         
<a name="l01084"></a>01084         <span class="comment"># read the groundwaer parameters data</span>
<a name="l01085"></a>01085         self._read_gw_par()
<a name="l01086"></a>01086         
<a name="l01087"></a>01087         <span class="comment"># read the ET parameter data</span>
<a name="l01088"></a>01088         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a9ca4a6bb12f5f22f83f437fb684a0eb7">_read_ET_par</a>()
<a name="l01089"></a>01089         
<a name="l01090"></a>01090         <span class="comment"># read the forcing infomation</span>
<a name="l01091"></a>01091         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a76591a94914bae31c2c6096a7440d507">_read_forcing</a>()
<a name="l01092"></a>01092         
<a name="l01093"></a>01093         <span class="comment"># read the outfile name</span>
<a name="l01094"></a>01094         self._read_ofile_name()
<a name="l01095"></a>01095         
<a name="l01096"></a>01096         <span class="comment"># print the reading status</span>
<a name="l01097"></a>01097         output_message = <span class="stringliteral">&#39;Input data reading completed sucessfully&#39;</span>
<a name="l01098"></a>01098         self._colored_output(output_message, 32)
<a name="l01099"></a>01099 
<a name="l01100"></a>01100     <span class="keyword">def </span>_read_initial_condition(self):
<a name="l01101"></a>01101         <span class="stringliteral">&quot;&quot;&quot;</span>
<a name="l01102"></a><a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#af058e03d7e7af6e10f48add951bf397e">01102</a> <span class="stringliteral">        read initial condition</span>
<a name="l01103"></a>01103 <span class="stringliteral">        &quot;&quot;&quot;</span>
<a name="l01104"></a>01104         <span class="comment">#get the row number from the ind</span>
<a name="l01105"></a>01105         j = self.ind[<span class="stringliteral">&#39;initial_condition&#39;</span>]
<a name="l01106"></a>01106         
<a name="l01107"></a>01107         book = xlrd.open_workbook(self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a98d023b5ac919bd04b192860be82aa4b">input_file</a>)
<a name="l01108"></a>01108         sheet = book.sheet_by_name(<span class="stringliteral">&#39;initial_condition&#39;</span>)
<a name="l01109"></a>01109         theta_0 = sheet.row_values(j,2)
<a name="l01110"></a>01110         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a5ef8efa68549b0938e61a17809966bf1">initial_gwl</a> = sheet.cell_value(j,1)
<a name="l01111"></a>01111         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#af058e03d7e7af6e10f48add951bf397e">initial_sm</a> = np.array(theta_0)
<a name="l01112"></a>01112         
<a name="l01113"></a>01113                
<a name="l01114"></a>01114 
<a name="l01115"></a>01115     <span class="keyword">def </span>_read_shp_ens(self):
<a name="l01116"></a>01116         <span class="stringliteral">&quot;&quot;&quot;</span>
<a name="l01117"></a><a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#af81ae7a5cd5fe5ce64a3fb356b3a3827">01117</a> <span class="stringliteral">        read the soil hydraulic parameters</span>
<a name="l01118"></a>01118 <span class="stringliteral">        &quot;&quot;&quot;</span>
<a name="l01119"></a>01119         <span class="comment">#get the row number from the ind</span>
<a name="l01120"></a>01120         j = self.ind[<span class="stringliteral">&#39;soil_hyd_par&#39;</span>]
<a name="l01121"></a>01121         
<a name="l01122"></a>01122         book = xlrd.open_workbook(self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a98d023b5ac919bd04b192860be82aa4b">input_file</a>)
<a name="l01123"></a>01123         sheet = book.sheet_by_name(<span class="stringliteral">&#39;soil_hyd_par&#39;</span>)
<a name="l01124"></a>01124         shp_ens = {}
<a name="l01125"></a>01125         shp_ens[<span class="stringliteral">&#39;qr&#39;</span>] = sheet.cell_value(j,1)
<a name="l01126"></a>01126         shp_ens[<span class="stringliteral">&#39;f&#39;</span>] = sheet.cell_value(j,2)
<a name="l01127"></a>01127         shp_ens[<span class="stringliteral">&#39;a&#39;</span>] = sheet.cell_value(j,3)
<a name="l01128"></a>01128         shp_ens[<span class="stringliteral">&#39;n&#39;</span>] = sheet.cell_value(j,4)
<a name="l01129"></a>01129         shp_ens[<span class="stringliteral">&#39;Ks&#39;</span>] = sheet.cell_value(j,5)
<a name="l01130"></a>01130         shp_ens[<span class="stringliteral">&#39;l&#39;</span>] = sheet.cell_value(j,6)
<a name="l01131"></a>01131         <span class="comment">#soil_par[&#39;evap_wp&#39;] = sheet.cell_value(j,7)</span>
<a name="l01132"></a>01132         <span class="comment">#soil_par[&#39;evap_fc&#39;] = sheet.cell_value(j,8)</span>
<a name="l01133"></a>01133         shp_ens[<span class="stringliteral">&#39;zl&#39;</span>] = sheet.cell_value(j,9)
<a name="l01134"></a>01134         shp_ens[<span class="stringliteral">&#39;fl&#39;</span>] = sheet.cell_value(j,10)
<a name="l01135"></a>01135         
<a name="l01136"></a>01136         m = 1-1/shp_ens[<span class="stringliteral">&#39;n&#39;</span>]
<a name="l01137"></a>01137         <span class="comment"># evaluate wilting point and field capacity</span>
<a name="l01138"></a>01138         shp_ens[<span class="stringliteral">&#39;evap_fc&#39;</span>] = self.psi2theta(-0.33, shp_ens[<span class="stringliteral">&#39;qr&#39;</span>], shp_ens[<span class="stringliteral">&#39;f&#39;</span>], 
<a name="l01139"></a>01139                                shp_ens[<span class="stringliteral">&#39;a&#39;</span>], m, shp_ens[<span class="stringliteral">&#39;n&#39;</span>])
<a name="l01140"></a>01140         
<a name="l01141"></a>01141         shp_ens[<span class="stringliteral">&#39;evap_wp&#39;</span>] = self.psi2theta(-15, shp_ens[<span class="stringliteral">&#39;qr&#39;</span>], shp_ens[<span class="stringliteral">&#39;f&#39;</span>], 
<a name="l01142"></a>01142                                shp_ens[<span class="stringliteral">&#39;a&#39;</span>], m, shp_ens[<span class="stringliteral">&#39;n&#39;</span>])
<a name="l01143"></a>01143                                
<a name="l01144"></a>01144         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#af81ae7a5cd5fe5ce64a3fb356b3a3827">shp_ens</a> = shp_ens
<a name="l01145"></a>01145         
<a name="l01146"></a>01146         <span class="comment"># maximum and minimum range of the paramters</span>
<a name="l01147"></a>01147         self.qr_min, self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a74460781304be9b1a9e1091fe9ac8542">qr_max</a> = 0.02, 0.12 
<a name="l01148"></a>01148         self.f_min, self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a2bd0a9dada37b2589cbbfce6bdad34a3">f_max</a> = 0.25, 0.4 
<a name="l01149"></a>01149         self.a_min, self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a266e05adb9a9eb932be1aa21cce0abd7">a_max</a> = 2, 5 
<a name="l01150"></a>01150         self.n_min, self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#aeaa84b633b369cf4775bba57b80e4720">n_max</a> = 1.4, 2.4 
<a name="l01151"></a>01151         self.Ks_min, self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#ae4ccf5d8e2104971b4605834468b6fd1">Ks_max</a> = 1e-6, 1e-5 
<a name="l01152"></a>01152         self.l_min, self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a38302a6260964bcd1911079381d5e243">l_max</a> = 0.4, 0.6 
<a name="l01153"></a>01153 
<a name="l01154"></a>01154 
<a name="l01155"></a>01155     <span class="keyword">def </span>_perturb_soil_par_ens(self):
<a name="l01156"></a>01156         <span class="stringliteral">&quot;&quot;&quot;</span>
<a name="l01157"></a>01157 <span class="stringliteral">        this functions perturb the soil hydraulic parameters </span>
<a name="l01158"></a><a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#ad8d0c59c4df8692617eb91fd3d426ec4">01158</a> <span class="stringliteral">        using the gaussian random variables</span>
<a name="l01159"></a>01159 <span class="stringliteral">        &quot;&quot;&quot;</span>
<a name="l01160"></a>01160         v = np.random.normal(size=(self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a2a903a1d70e0c5d8a38c15a3e976a3d3">n_ens</a>,6))
<a name="l01161"></a>01161         v = v-np.tile(v.mean(axis=0),(self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a2a903a1d70e0c5d8a38c15a3e976a3d3">n_ens</a>,1))
<a name="l01162"></a>01162         qr = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#aa47a178931262b4026d9322d4f567436">soil_par_ens</a>[<span class="stringliteral">&#39;qr&#39;</span>]+self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a6315831a8018352dc74d66d5002b5287">soil_pert</a>[<span class="stringliteral">&#39;qr&#39;</span>]*v[:,0]
<a name="l01163"></a>01163         f = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#aa47a178931262b4026d9322d4f567436">soil_par_ens</a>[<span class="stringliteral">&#39;f&#39;</span>]+self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a6315831a8018352dc74d66d5002b5287">soil_pert</a>[<span class="stringliteral">&#39;f&#39;</span>]*v[:,1]
<a name="l01164"></a>01164         a = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#aa47a178931262b4026d9322d4f567436">soil_par_ens</a>[<span class="stringliteral">&#39;a&#39;</span>]+self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a6315831a8018352dc74d66d5002b5287">soil_pert</a>[<span class="stringliteral">&#39;a&#39;</span>]*v[:,2]
<a name="l01165"></a>01165         n = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#aa47a178931262b4026d9322d4f567436">soil_par_ens</a>[<span class="stringliteral">&#39;n&#39;</span>]+self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a6315831a8018352dc74d66d5002b5287">soil_pert</a>[<span class="stringliteral">&#39;n&#39;</span>]*v[:,3]
<a name="l01166"></a>01166         Ks = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#aa47a178931262b4026d9322d4f567436">soil_par_ens</a>[<span class="stringliteral">&#39;Ks&#39;</span>]+self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a6315831a8018352dc74d66d5002b5287">soil_pert</a>[<span class="stringliteral">&#39;Ks&#39;</span>]*(v[:,4]-v[:,4].mean())
<a name="l01167"></a>01167         l = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#aa47a178931262b4026d9322d4f567436">soil_par_ens</a>[<span class="stringliteral">&#39;l&#39;</span>]+self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a6315831a8018352dc74d66d5002b5287">soil_pert</a>[<span class="stringliteral">&#39;l&#39;</span>]*v[:,5]
<a name="l01168"></a>01168         
<a name="l01169"></a>01169 
<a name="l01170"></a>01170         <span class="comment"># check for the range of generated parameters</span>
<a name="l01171"></a>01171         qr[qr&gt;self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a74460781304be9b1a9e1091fe9ac8542">qr_max</a>] = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a74460781304be9b1a9e1091fe9ac8542">qr_max</a>
<a name="l01172"></a>01172         f[f&gt;self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a2bd0a9dada37b2589cbbfce6bdad34a3">f_max</a>] = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a2bd0a9dada37b2589cbbfce6bdad34a3">f_max</a>
<a name="l01173"></a>01173         a[a&gt;self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a266e05adb9a9eb932be1aa21cce0abd7">a_max</a>] = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a266e05adb9a9eb932be1aa21cce0abd7">a_max</a>
<a name="l01174"></a>01174         n[n&gt;self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#aeaa84b633b369cf4775bba57b80e4720">n_max</a>] = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#aeaa84b633b369cf4775bba57b80e4720">n_max</a>
<a name="l01175"></a>01175         Ks[Ks&gt;self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#ae4ccf5d8e2104971b4605834468b6fd1">Ks_max</a>] = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#ae4ccf5d8e2104971b4605834468b6fd1">Ks_max</a>
<a name="l01176"></a>01176         l[l&gt;self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a38302a6260964bcd1911079381d5e243">l_max</a>] = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a38302a6260964bcd1911079381d5e243">l_max</a>
<a name="l01177"></a>01177         
<a name="l01178"></a>01178         qr[qr&lt;self.qr_min]  = self.qr_min
<a name="l01179"></a>01179         f[f&lt;self.f_min]  = self.f_min
<a name="l01180"></a>01180         a[a&lt;self.a_min]     = self.a_min
<a name="l01181"></a>01181         n[n&lt;self.n_min]                 = self.n_min
<a name="l01182"></a>01182         Ks[Ks&lt;self.Ks_min]              = self.Ks_min
<a name="l01183"></a>01183         l[l&lt;self.l_min]                 = self.l_min        
<a name="l01184"></a>01184 
<a name="l01185"></a>01185         soil_par_ens = {}
<a name="l01186"></a>01186         soil_par_ens[<span class="stringliteral">&#39;qr&#39;</span>] = qr
<a name="l01187"></a>01187         soil_par_ens[<span class="stringliteral">&#39;f&#39;</span>] = f
<a name="l01188"></a>01188         soil_par_ens[<span class="stringliteral">&#39;a&#39;</span>] = a
<a name="l01189"></a>01189         soil_par_ens[<span class="stringliteral">&#39;n&#39;</span>] = n
<a name="l01190"></a>01190         soil_par_ens[<span class="stringliteral">&#39;Ks&#39;</span>] = Ks
<a name="l01191"></a>01191         soil_par_ens[<span class="stringliteral">&#39;l&#39;</span>] = l        
<a name="l01192"></a>01192         m = 1-1/n
<a name="l01193"></a>01193         soil_par_ens[<span class="stringliteral">&#39;evap_fc&#39;</span>] = self.psi2theta(-0.33, qr, f, a, m, n)
<a name="l01194"></a>01194         
<a name="l01195"></a>01195         soil_par_ens[<span class="stringliteral">&#39;evap_wp&#39;</span>] = self.psi2theta(-15, qr, f, a, m, n)
<a name="l01196"></a>01196         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#aa47a178931262b4026d9322d4f567436">soil_par_ens</a> = soil_par_ens
<a name="l01197"></a>01197         
<a name="l01198"></a>01198         fl = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#af81ae7a5cd5fe5ce64a3fb356b3a3827">shp_ens</a>[<span class="stringliteral">&#39;fl&#39;</span>]
<a name="l01199"></a>01199         mid_z = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a7bee99e76ddebd5474e8ac05e2a31484">mid_z</a>
<a name="l01200"></a>01200         ET_par = {}
<a name="l01201"></a>01201         ET_par[<span class="stringliteral">&#39;trans_fc&#39;</span>] = self.psi2theta(-0.33, qr, f, a, m, n)
<a name="l01202"></a>01202         ET_par[<span class="stringliteral">&#39;trans_wp&#39;</span>] = self.psi2theta(-15, qr, f, a, m, n)
<a name="l01203"></a>01203         
<a name="l01204"></a>01204         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#ad8d0c59c4df8692617eb91fd3d426ec4">ET_par</a> = ET_par
<a name="l01205"></a>01205 
<a name="l01206"></a>01206     <span class="keyword">def </span>_runoff_ens_fun(self):
<a name="l01207"></a>01207         <span class="stringliteral">&quot;&quot;&quot;</span>
<a name="l01208"></a>01208 <span class="stringliteral">        this module will calculate the runoff based on the initial soil moisture </span>
<a name="l01209"></a>01209 <span class="stringliteral">        and net precipitation</span>
<a name="l01210"></a>01210 <span class="stringliteral">        </span>
<a name="l01211"></a>01211 <span class="stringliteral">        Input:</span>
<a name="l01212"></a>01212 <span class="stringliteral">            C:            Average soil moisture</span>
<a name="l01213"></a>01213 <span class="stringliteral">            Pn:           Precipitation after interception loss</span>
<a name="l01214"></a>01214 <span class="stringliteral">            runoff_par:   runoff parameters [&#39;Cm&#39;,&#39;B&#39;]</span>
<a name="l01215"></a>01215 <span class="stringliteral">            </span>
<a name="l01216"></a>01216 <span class="stringliteral">        Output:</span>
<a name="l01217"></a><a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#aad646d0e7ade57589dd0daa53cdb5647">01217</a> <span class="stringliteral">            runoff_cur:     Runoff at current time step</span>
<a name="l01218"></a>01218 <span class="stringliteral">        &quot;&quot;&quot;</span>
<a name="l01219"></a>01219         <span class="comment">#Cm = self.runoff_par[&#39;Cm&#39;]</span>
<a name="l01220"></a>01220         <span class="comment">#B = self.runoff_par[&#39;B&#39;]</span>
<a name="l01221"></a>01221         <span class="comment">#F = 1 - (1- self.sm[:,self.t].mean()/Cm)**B </span>
<a name="l01222"></a>01222         <span class="comment">#self.runoff_cur = self.net_rain_cur*F</span>
<a name="l01223"></a>01223         <span class="comment">#self.runoff[self.t] = self.runoff_cur</span>
<a name="l01224"></a>01224         ens = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#aca1e8b85661bf974043c2003b97bd658">ens</a>
<a name="l01225"></a>01225         <span class="comment"># chen and dudhia</span>
<a name="l01226"></a>01226         Kdt_ref = 3.0
<a name="l01227"></a>01227         Kref = 2e-6
<a name="l01228"></a>01228         theta_s = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#aa47a178931262b4026d9322d4f567436">soil_par_ens</a>[<span class="stringliteral">&#39;f&#39;</span>][ens]*np.exp(-self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a7bee99e76ddebd5474e8ac05e2a31484">mid_z</a>/self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#af81ae7a5cd5fe5ce64a3fb356b3a3827">shp_ens</a>[<span class="stringliteral">&#39;fl&#39;</span>])
<a name="l01229"></a>01229         
<a name="l01230"></a>01230         Dx = theta_s - self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#ab6bee74b491c69096614664515497199">sm_ens</a>[ens]
<a name="l01231"></a>01231         Dx = Dx*self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a7bee99e76ddebd5474e8ac05e2a31484">mid_z</a>
<a name="l01232"></a>01232         Dx = Dx[:3].sum()
<a name="l01233"></a>01233         Kdt = Kdt_ref*self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#aa47a178931262b4026d9322d4f567436">soil_par_ens</a>[<span class="stringliteral">&#39;Ks&#39;</span>][ens]/Kref
<a name="l01234"></a>01234         
<a name="l01235"></a>01235         Pn = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#ae76a547eb745f43b237c30973b99e9d8">net_rain_cur</a>
<a name="l01236"></a>01236         Imax = Pn*(Dx*(1-np.exp(-Kdt)))/(Pn+Dx*(1-np.exp(-Kdt)))
<a name="l01237"></a>01237         
<a name="l01238"></a>01238         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#aad646d0e7ade57589dd0daa53cdb5647">runoff_cur</a> = Pn - Imax 
<a name="l01239"></a>01239         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a392e81d0c2ff5ec6c04069207628af63">runoff</a> = 1.0*self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#aad646d0e7ade57589dd0daa53cdb5647">runoff_cur</a>
<a name="l01240"></a>01240 
<a name="l01241"></a>01241     <span class="keyword">def </span>_interception_ens_fun(self):
<a name="l01242"></a>01242         <span class="stringliteral">&quot;&quot;&quot;</span>
<a name="l01243"></a>01243 <span class="stringliteral">        Input:</span>
<a name="l01244"></a>01244 <span class="stringliteral">            lai_cur:    LAI at the current time step</span>
<a name="l01245"></a>01245 <span class="stringliteral">            pet_cur:     PET at the current time step</span>
<a name="l01246"></a>01246 <span class="stringliteral">            rain_cur:    Rainfall at the current time step</span>
<a name="l01247"></a>01247 <span class="stringliteral">            </span>
<a name="l01248"></a>01248 <span class="stringliteral">        Output:</span>
<a name="l01249"></a>01249 <span class="stringliteral">            E_In:     Evaporation from Interception</span>
<a name="l01250"></a>01250 <span class="stringliteral">            T:        Transpiration</span>
<a name="l01251"></a>01251 <span class="stringliteral">            E:        Evaporation</span>
<a name="l01252"></a>01252 <span class="stringliteral">            net_rain_cur:   Net rainfall (precipitation-interception loss) at </span>
<a name="l01253"></a><a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a217c73f1f228f47f1a134647958fd97c">01253</a> <span class="stringliteral">            current time step</span>
<a name="l01254"></a>01254 <span class="stringliteral">        &quot;&quot;&quot;</span>
<a name="l01255"></a>01255         In = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a813ed5ac2ab93547a386e30c34a99971">lai</a>[self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a2e276ede84b8117f170836a18bff3d62" title="run the model ########################">t</a>]*0.2/1000.0
<a name="l01256"></a>01256         soil_cover = np.exp(-0.5*self.lai_cur)
<a name="l01257"></a>01257         veg_cover = 1 - soil_cover
<a name="l01258"></a>01258         
<a name="l01259"></a>01259         E_In = np.min([veg_cover*self.rain_cur, veg_cover*self.pet_cur, veg_cover*In])
<a name="l01260"></a>01260         T = np.min([veg_cover*self.pet_cur - 0.2*E_In, 1.2*self.pet_cur - E_In])
<a name="l01261"></a>01261         E = np.min([soil_cover*self.pet_cur, 1.2*self.pet_cur-T-E_In])
<a name="l01262"></a>01262         net_rain_cur = self.rain_cur - E_In
<a name="l01263"></a>01263         
<a name="l01264"></a>01264         
<a name="l01265"></a>01265         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a8ee1df4c27b7f01c7961a30c02fd6421">E_In</a> = E_In
<a name="l01266"></a>01266         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a217c73f1f228f47f1a134647958fd97c">trans</a> = T
<a name="l01267"></a>01267         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a6f2de34d3463ef8027bc9a46d1da3a38">evap</a> = E
<a name="l01268"></a>01268         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#ae76a547eb745f43b237c30973b99e9d8">net_rain_cur</a> = net_rain_cur
<a name="l01269"></a>01269 
<a name="l01270"></a>01270     <span class="keyword">def </span>_soil_ens_fun(self):
<a name="l01271"></a>01271         <span class="stringliteral">&quot;&quot;&quot;</span>
<a name="l01272"></a>01272 <span class="stringliteral">        Input:</span>
<a name="l01273"></a>01273 <span class="stringliteral">            soil_par     : soil hydraulic parameters</span>
<a name="l01274"></a>01274 <span class="stringliteral">            z            : thicknes of layers</span>
<a name="l01275"></a>01275 <span class="stringliteral">            R            : runoff</span>
<a name="l01276"></a>01276 <span class="stringliteral">            no_layer     : no. of layers</span>
<a name="l01277"></a>01277 <span class="stringliteral">            theta_0      : initial soil moisture</span>
<a name="l01278"></a>01278 <span class="stringliteral">            root_frac    : root fraction in each layer</span>
<a name="l01279"></a>01279 <span class="stringliteral">            T            : transpiration</span>
<a name="l01280"></a>01280 <span class="stringliteral">            Pn           : net precipitation (precipitation - interception)</span>
<a name="l01281"></a>01281 <span class="stringliteral">            E            : soil evaporation</span>
<a name="l01282"></a>01282 <span class="stringliteral">            Pu           : pumping</span>
<a name="l01283"></a>01283 <span class="stringliteral">            dt           : time step</span>
<a name="l01284"></a>01284 <span class="stringliteral">        Output:</span>
<a name="l01285"></a>01285 <span class="stringliteral">            theta_1: soil moisture for next time step</span>
<a name="l01286"></a><a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a08ce27bf008c6b92aec02973587e8206">01286</a> <span class="stringliteral">            Re: recharge (L)</span>
<a name="l01287"></a>01287 <span class="stringliteral">        &quot;&quot;&quot;</span>
<a name="l01288"></a>01288         <span class="comment"># convert the fluxes from L to L/T</span>
<a name="l01289"></a>01289         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#aad646d0e7ade57589dd0daa53cdb5647">runoff_cur</a> /= self.dt
<a name="l01290"></a>01290         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a6f2de34d3463ef8027bc9a46d1da3a38">evap</a> /= self.dt
<a name="l01291"></a>01291         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a217c73f1f228f47f1a134647958fd97c">trans</a> /= self.dt
<a name="l01292"></a>01292         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#ae76a547eb745f43b237c30973b99e9d8">net_rain_cur</a> /= self.dt
<a name="l01293"></a>01293         self.pumping_cur /= self.dt
<a name="l01294"></a>01294         
<a name="l01295"></a>01295         <span class="comment"># initialize soil moisture at next time step        </span>
<a name="l01296"></a>01296         theta_1_mat = np.zeros(self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a7700d8f689b1796fa34e490e5b16753d">no_layer</a>)
<a name="l01297"></a>01297 
<a name="l01298"></a>01298         <span class="comment"># get the information about current ensemble</span>
<a name="l01299"></a>01299         ens = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#aca1e8b85661bf974043c2003b97bd658">ens</a>
<a name="l01300"></a>01300         sm = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#ab6bee74b491c69096614664515497199">sm_ens</a>[ens]
<a name="l01301"></a>01301         
<a name="l01302"></a>01302         <span class="comment"># estimate hydraulic properties</span>
<a name="l01303"></a>01303         K = np.zeros((self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a7700d8f689b1796fa34e490e5b16753d">no_layer</a>,1))
<a name="l01304"></a>01304         D = np.zeros((self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a7700d8f689b1796fa34e490e5b16753d">no_layer</a>,1))
<a name="l01305"></a>01305         <span class="keywordflow">for</span> i <span class="keywordflow">in</span> range(self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a7700d8f689b1796fa34e490e5b16753d">no_layer</a>):
<a name="l01306"></a>01306             <span class="keywordflow">if</span> i&lt;self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a7700d8f689b1796fa34e490e5b16753d">no_layer</a>-1:
<a name="l01307"></a>01307                 <span class="comment"># using the maximum value of theta</span>
<a name="l01308"></a>01308                 <span class="comment">#K[i], D[i] = self._shp(max(self.sm[i,self.t],self.sm[i+1, self.t]),i)</span>
<a name="l01309"></a>01309                 <span class="comment"># using the arithmatic mean of theta</span>
<a name="l01310"></a>01310                 K[i], D[i] = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#ab024e3e1ceed6f591f8e3a905e014e1d">_shp</a>(0.5*(sm[i]+sm[i+1]),i)
<a name="l01311"></a>01311             <span class="keywordflow">else</span>:
<a name="l01312"></a>01312                 K[i], D[i] = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#ab024e3e1ceed6f591f8e3a905e014e1d">_shp</a>(sm[i],i)
<a name="l01313"></a>01313         K = K.flatten()*np.exp(-self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a7bee99e76ddebd5474e8ac05e2a31484">mid_z</a>/self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#af81ae7a5cd5fe5ce64a3fb356b3a3827">shp_ens</a>[<span class="stringliteral">&#39;zl&#39;</span>])
<a name="l01314"></a>01314         D = D.flatten()*np.exp(-self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a7bee99e76ddebd5474e8ac05e2a31484">mid_z</a>/self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#af81ae7a5cd5fe5ce64a3fb356b3a3827">shp_ens</a>[<span class="stringliteral">&#39;zl&#39;</span>])
<a name="l01315"></a>01315         
<a name="l01316"></a>01316         <span class="comment"># calculate stress in soil moisture and subsequently the actual </span>
<a name="l01317"></a>01317         <span class="comment"># evaporation and transpiration</span>
<a name="l01318"></a>01318         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a9d457a074e4543564513c7137887264b">_smi_fun</a>()
<a name="l01319"></a>01319         AE = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a6f2de34d3463ef8027bc9a46d1da3a38">evap</a>*self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#ad0cf7e96813700528dded88499688283">SSMI</a>
<a name="l01320"></a>01320         self._transpiration_fun()
<a name="l01321"></a>01321         AT = self.AT 
<a name="l01322"></a>01322                 
<a name="l01323"></a>01323         <span class="comment"># set up the A and U matrix</span>
<a name="l01324"></a>01324         A = np.zeros((self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a7700d8f689b1796fa34e490e5b16753d">no_layer</a>, self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a7700d8f689b1796fa34e490e5b16753d">no_layer</a>))
<a name="l01325"></a>01325         U = np.zeros((self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a7700d8f689b1796fa34e490e5b16753d">no_layer</a>,1))
<a name="l01326"></a>01326         z = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#ab38281ca276abcbc9b5faa41207c024c">z</a>
<a name="l01327"></a>01327         <span class="keywordflow">for</span> i <span class="keywordflow">in</span> range(self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a7700d8f689b1796fa34e490e5b16753d">no_layer</a>):
<a name="l01328"></a>01328             <span class="keywordflow">if</span> i == 0:
<a name="l01329"></a>01329                 A[0,0] = -D[1]/(0.5*z[1]*(z[1]+z[2]))
<a name="l01330"></a>01330                 A[0,1] = D[1]/(0.5*z[1]*(z[1]+z[2]))
<a name="l01331"></a>01331                 U[0] = (-AT[0] - K[0] + self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#ae76a547eb745f43b237c30973b99e9d8">net_rain_cur</a> - AE - self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#aad646d0e7ade57589dd0daa53cdb5647">runoff_cur</a> \
<a name="l01332"></a>01332                 + self.pumping_cur)/z[0]
<a name="l01333"></a>01333             <span class="keywordflow">elif</span> i == self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a7700d8f689b1796fa34e490e5b16753d">no_layer</a>-1:
<a name="l01334"></a>01334                 A[i,i] = -D[i-1]/(0.5*z[i]*(z[i-1]+z[i]))
<a name="l01335"></a>01335                 A[i,i-1] = D[i-1]/(0.5*z[i]*(z[i-1]+z[i])) 
<a name="l01336"></a>01336                 U[i] = (-AT[i] + K[i-1] - K[i])/z[i]
<a name="l01337"></a>01337             <span class="keywordflow">else</span>:
<a name="l01338"></a>01338                 A[i,i-1] = D[i-1]/(0.5*z[i]*(z[i-1]+z[i]))
<a name="l01339"></a>01339                 A[i,i+1] = D[i]/(0.5*z[i]*(z[i]+z[i+1]))
<a name="l01340"></a>01340                 A[i,i] = -A[i,i-1] -A[i,i+1]
<a name="l01341"></a>01341                 U[i] = (-AT[i] +K[i-1] - K[i])/z[i]
<a name="l01342"></a>01342                     
<a name="l01343"></a>01343             <span class="comment"># convert from A,U to F,G</span>
<a name="l01344"></a>01344             F = np.eye(self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a7700d8f689b1796fa34e490e5b16753d">no_layer</a>) + A*self.dt
<a name="l01345"></a>01345             <span class="comment">#    if (F&gt;1.4).any() | (F&lt;0.6).any():</span>
<a name="l01346"></a>01346             <span class="comment">#        F = expm(A*dt)</span>
<a name="l01347"></a>01347             G = np.dot(F,U)*self.dt
<a name="l01348"></a>01348             
<a name="l01349"></a>01349             <span class="comment"># calculate theta for next time step</span>
<a name="l01350"></a>01350             theta_1 = np.dot(F, sm) + G.flatten()
<a name="l01351"></a>01351             
<a name="l01352"></a>01352             <span class="comment"># convert recharge from L/T to L</span>
<a name="l01353"></a>01353             Re = K[-1]*self.dt
<a name="l01354"></a>01354             
<a name="l01355"></a>01355             <span class="comment"># remove the water as hortonian runoff, </span>
<a name="l01356"></a>01356             <span class="comment"># if the soil moisture exceeds saturation</span>
<a name="l01357"></a>01357             <span class="keywordflow">if</span> theta_1[0] &gt;= self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#aa47a178931262b4026d9322d4f567436">soil_par_ens</a>[<span class="stringliteral">&#39;f&#39;</span>][ens]:
<a name="l01358"></a>01358                 HR = (theta_1[0]-self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#aa47a178931262b4026d9322d4f567436">soil_par_ens</a>[<span class="stringliteral">&#39;f&#39;</span>][ens])*z[0]
<a name="l01359"></a>01359                 theta_1[0] = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#aa47a178931262b4026d9322d4f567436">soil_par_ens</a>[<span class="stringliteral">&#39;f&#39;</span>][ens]
<a name="l01360"></a>01360             <span class="keywordflow">else</span>:
<a name="l01361"></a>01361                 HR = 0
<a name="l01362"></a>01362 
<a name="l01363"></a>01363             <span class="comment">#check for the range of the theta</span>
<a name="l01364"></a>01364             theta_s = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#aa47a178931262b4026d9322d4f567436">soil_par_ens</a>[<span class="stringliteral">&#39;f&#39;</span>][ens]*np.exp(-self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a7bee99e76ddebd5474e8ac05e2a31484">mid_z</a>/self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#af81ae7a5cd5fe5ce64a3fb356b3a3827">shp_ens</a>[<span class="stringliteral">&#39;fl&#39;</span>])
<a name="l01365"></a>01365             wp = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#ad8d0c59c4df8692617eb91fd3d426ec4">ET_par</a>[<span class="stringliteral">&#39;trans_wp&#39;</span>][ens]*np.exp(-self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a7bee99e76ddebd5474e8ac05e2a31484">mid_z</a>/self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#af81ae7a5cd5fe5ce64a3fb356b3a3827">shp_ens</a>[<span class="stringliteral">&#39;fl&#39;</span>])
<a name="l01366"></a>01366             <span class="keywordflow">for</span> j <span class="keywordflow">in</span> range(self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a7700d8f689b1796fa34e490e5b16753d">no_layer</a>):
<a name="l01367"></a>01367                 <span class="keywordflow">if</span> theta_1[j]&gt;theta_s[j]:
<a name="l01368"></a>01368                     theta_1[j] = theta_s[j]
<a name="l01369"></a>01369                 <span class="keywordflow">if</span> theta_1[j]&lt;wp[j]:
<a name="l01370"></a>01370                     theta_1[j] = wp[j]
<a name="l01371"></a>01371             
<a name="l01372"></a>01372             <span class="comment"># put the result of this pixel into matrix</span>
<a name="l01373"></a>01373             self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#ab6bee74b491c69096614664515497199">sm_ens</a>[ens] = theta_1.flatten()
<a name="l01374"></a>01374             self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a8b56d0c415feae4d5cd9c12b08867e91">G</a> = G
<a name="l01375"></a>01375             self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a393e72d17bb361b3e4371e77a495783a">F</a> = F
<a name="l01376"></a>01376             self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a08ce27bf008c6b92aec02973587e8206">theta_1</a> = theta_1
<a name="l01377"></a>01377             self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#ae78853c5a25db29c131b9f01f08bb7f8">recharge</a> = Re
<a name="l01378"></a>01378             self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a9f05386f32f1bcf0da18747c992a9b0b">actual_evap</a> = AE*self.dt
<a name="l01379"></a>01379             self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#ad0d556d5d9f2a6c6fd638f402b5c0d9d">actual_trans</a> = AT.sum()*self.dt
<a name="l01380"></a>01380             self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#adbe25d2844c4f39e24b4315ae5706d55">horton_runoff</a> = HR
<a name="l01381"></a>01381 
<a name="l01382"></a>01382     <span class="keyword">def </span>_smi_fun(self):
<a name="l01383"></a>01383         <span class="stringliteral">&quot;&quot;&quot;</span>
<a name="l01384"></a>01384 <span class="stringliteral">        this module computes the surface soil moisture stress index, and root zone soil moisture </span>
<a name="l01385"></a><a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#ad0cf7e96813700528dded88499688283">01385</a> <span class="stringliteral">        stress index</span>
<a name="l01386"></a>01386 <span class="stringliteral">        &quot;&quot;&quot;</span>
<a name="l01387"></a>01387         ens = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#aca1e8b85661bf974043c2003b97bd658">ens</a>
<a name="l01388"></a>01388         sm = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#ab6bee74b491c69096614664515497199">sm_ens</a>[ens]
<a name="l01389"></a>01389         <span class="comment"># calculate surface soil moisture index</span>
<a name="l01390"></a>01390         SSMI = (sm[0] - self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#aa47a178931262b4026d9322d4f567436">soil_par_ens</a>[<span class="stringliteral">&#39;evap_wp&#39;</span>][ens])/(
<a name="l01391"></a>01391                 self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#aa47a178931262b4026d9322d4f567436">soil_par_ens</a>[<span class="stringliteral">&#39;evap_fc&#39;</span>][ens] - self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#aa47a178931262b4026d9322d4f567436">soil_par_ens</a>[<span class="stringliteral">&#39;evap_wp&#39;</span>][ens])
<a name="l01392"></a>01392                 
<a name="l01393"></a>01393         <span class="keywordflow">if</span> SSMI &gt; 1: 
<a name="l01394"></a>01394             SSMI = 1
<a name="l01395"></a>01395         <span class="keywordflow">elif</span> SSMI&lt;0:
<a name="l01396"></a>01396             SSMI = 0
<a name="l01397"></a>01397     
<a name="l01398"></a>01398         <span class="comment"># calculate root zone soil moisture index</span>
<a name="l01399"></a>01399         RZSMI = np.zeros((self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a7700d8f689b1796fa34e490e5b16753d">no_layer</a>,))
<a name="l01400"></a>01400         mid_z = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a7bee99e76ddebd5474e8ac05e2a31484">mid_z</a>
<a name="l01401"></a>01401         fl = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#af81ae7a5cd5fe5ce64a3fb356b3a3827">shp_ens</a>[<span class="stringliteral">&#39;fl&#39;</span>]
<a name="l01402"></a>01402         
<a name="l01403"></a>01403         <span class="keywordflow">for</span> i <span class="keywordflow">in</span> range(self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a7700d8f689b1796fa34e490e5b16753d">no_layer</a>):
<a name="l01404"></a>01404             trans_wp = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#ad8d0c59c4df8692617eb91fd3d426ec4">ET_par</a>[<span class="stringliteral">&#39;trans_wp&#39;</span>][ens]*np.exp(-mid_z/fl)[i]
<a name="l01405"></a>01405             trans_fc = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#ad8d0c59c4df8692617eb91fd3d426ec4">ET_par</a>[<span class="stringliteral">&#39;trans_fc&#39;</span>][ens]*np.exp(-mid_z/fl)[i]
<a name="l01406"></a>01406             <span class="keywordflow">if</span> (sm[i] &lt; trans_wp):
<a name="l01407"></a>01407                 RZSMI[i] = 0
<a name="l01408"></a>01408             <span class="keywordflow">elif</span> sm[i] &gt; trans_fc:
<a name="l01409"></a>01409                 RZSMI[i] = 1
<a name="l01410"></a>01410             <span class="keywordflow">else</span>:
<a name="l01411"></a>01411                 
<a name="l01412"></a>01412                 RZSMI[i] = (sm[i]-trans_wp)/(trans_fc - trans_wp)
<a name="l01413"></a>01413             
<a name="l01414"></a>01414         
<a name="l01415"></a>01415         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#ad0cf7e96813700528dded88499688283">SSMI</a> = SSMI
<a name="l01416"></a>01416         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a567fd2ed2bc3024ef078fe28a2f65d4f">RZSMI</a> = RZSMI
<a name="l01417"></a>01417 
<a name="l01418"></a>01418     <span class="keyword">def </span>_surface_storage_ens_fun(self):
<a name="l01419"></a>01419         <span class="stringliteral">&quot;&quot;&quot;</span>
<a name="l01420"></a>01420 <span class="stringliteral">        this module stores the surface water</span>
<a name="l01421"></a><a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a62fa93e11921e2a5f87fa710365b4560">01421</a> <span class="stringliteral">        and give as recharge to the groundwater model</span>
<a name="l01422"></a>01422 <span class="stringliteral">        &quot;&quot;&quot;</span>
<a name="l01423"></a>01423         ens = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#aca1e8b85661bf974043c2003b97bd658">ens</a>
<a name="l01424"></a>01424         <span class="comment"># update the storage based on the surface and hortonian runoff</span>
<a name="l01425"></a>01425         surface_storage = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#af12aee8cdd055057446b101b6c53f0b2">surface_storage_ens</a>[ens,self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a2e276ede84b8117f170836a18bff3d62" title="run the model ########################">t</a>] \
<a name="l01426"></a>01426                                             + self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#aad646d0e7ade57589dd0daa53cdb5647">runoff_cur</a> \
<a name="l01427"></a>01427                                             + self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#adbe25d2844c4f39e24b4315ae5706d55">horton_runoff</a>
<a name="l01428"></a>01428         a = 1.0*self.surface_storage_par[<span class="stringliteral">&#39;a&#39;</span>]
<a name="l01429"></a>01429         b = 1.0*self.surface_storage_par[<span class="stringliteral">&#39;b&#39;</span>]
<a name="l01430"></a>01430         Rep = a*surface_storage**b
<a name="l01431"></a>01431         <span class="comment">#print type(surface_storage)</span>
<a name="l01432"></a>01432         
<a name="l01433"></a>01433         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#af12aee8cdd055057446b101b6c53f0b2">surface_storage_ens</a>[ens,self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a2e276ede84b8117f170836a18bff3d62" title="run the model ########################">t</a>+1] = surface_storage - Rep
<a name="l01434"></a>01434         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a62fa93e11921e2a5f87fa710365b4560">Rep</a> = Rep     
<a name="l01435"></a>01435 
<a name="l01436"></a>01436     <span class="keyword">def </span>_gw_ens_fun(self):
<a name="l01437"></a>01437         <span class="stringliteral">&quot;&quot;&quot;</span>
<a name="l01438"></a><a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a4824e07792a5a639b0659f0ce5c1a79b">01438</a> <span class="stringliteral">        Groundwater module</span>
<a name="l01439"></a>01439 <span class="stringliteral">        &quot;&quot;&quot;</span>
<a name="l01440"></a>01440         ens = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#aca1e8b85661bf974043c2003b97bd658">ens</a>
<a name="l01441"></a>01441         F = self.gw_par[<span class="stringliteral">&#39;F&#39;</span>]
<a name="l01442"></a>01442         G = self.gw_par[<span class="stringliteral">&#39;G&#39;</span>]
<a name="l01443"></a>01443         hmin = self.gw_par[<span class="stringliteral">&#39;hmin&#39;</span>]
<a name="l01444"></a>01444         
<a name="l01445"></a>01445         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a4824e07792a5a639b0659f0ce5c1a79b">sy</a> = F/G
<a name="l01446"></a>01446         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a1550b2f8ff1d9bef6ba67c84ee4165c2">lam</a> = (1-F)*self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a4824e07792a5a639b0659f0ce5c1a79b">sy</a>
<a name="l01447"></a>01447         
<a name="l01448"></a>01448         <span class="comment"># net input = recharge - discharge</span>
<a name="l01449"></a>01449         u = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#ae78853c5a25db29c131b9f01f08bb7f8">recharge</a>-self.pumping_cur + self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a62fa93e11921e2a5f87fa710365b4560">Rep</a>
<a name="l01450"></a>01450         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a66efa37befe06bcf214daec41aec38da">gw_level_ens</a>[ens,self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a2e276ede84b8117f170836a18bff3d62" title="run the model ########################">t</a>+1] = F*(self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a66efa37befe06bcf214daec41aec38da">gw_level_ens</a>[ens,self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a2e276ede84b8117f170836a18bff3d62" title="run the model ########################">t</a>]-hmin) + G*u + hmin
<a name="l01451"></a>01451         
<a name="l01452"></a>01452         dzn = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a66efa37befe06bcf214daec41aec38da">gw_level_ens</a>[ens,self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a2e276ede84b8117f170836a18bff3d62" title="run the model ########################">t</a>+1] - self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a66efa37befe06bcf214daec41aec38da">gw_level_ens</a>[ens,self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a2e276ede84b8117f170836a18bff3d62" title="run the model ########################">t</a>] 
<a name="l01453"></a>01453         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a025a4c989872180a24adc0675759f549">discharge</a> = u - self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a4824e07792a5a639b0659f0ce5c1a79b">sy</a>*(dzn) <span class="comment"># simulated discharge</span>
<a name="l01454"></a>01454         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a73331d97d77e0b95245e4c7b81cb4e6b">z_ens</a>[ens,-1] = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a73331d97d77e0b95245e4c7b81cb4e6b">z_ens</a>[ens,-1] - dzn
<a name="l01455"></a>01455         
<a name="l01456"></a>01456     <span class="keyword">def </span>_read_spatial(self):
<a name="l01457"></a>01457         <span class="stringliteral">&quot;&quot;&quot;</span>
<a name="l01458"></a>01458 <span class="stringliteral">        Read the spatial info</span>
<a name="l01459"></a><a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a73331d97d77e0b95245e4c7b81cb4e6b">01459</a> <span class="stringliteral">        &quot;&quot;&quot;</span>
<a name="l01460"></a>01460         book = xlrd.open_workbook(self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a98d023b5ac919bd04b192860be82aa4b">input_file</a>)
<a name="l01461"></a>01461         sheet = book.sheet_by_name(<span class="stringliteral">&#39;spatial_info&#39;</span>)
<a name="l01462"></a>01462         <span class="comment"># get the row number from the ind</span>
<a name="l01463"></a>01463         j = self.ind[<span class="stringliteral">&#39;spatial_info&#39;</span>]
<a name="l01464"></a>01464         no_layer = int(sheet.cell_value(j,1))
<a name="l01465"></a>01465         z = sheet.row_values(j,2)
<a name="l01466"></a>01466         <span class="keywordflow">if</span> no_layer != len(z):
<a name="l01467"></a>01467             <span class="keywordflow">raise</span> ValueError(<span class="stringliteral">&#39;The length of the thickness_layers\</span>
<a name="l01468"></a>01468 <span class="stringliteral">            should be equal to the No_layer&#39;</span>)
<a name="l01469"></a>01469         
<a name="l01470"></a>01470         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a7700d8f689b1796fa34e490e5b16753d">no_layer</a> = no_layer
<a name="l01471"></a>01471         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#ab38281ca276abcbc9b5faa41207c024c">z</a> = z
<a name="l01472"></a>01472         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a73331d97d77e0b95245e4c7b81cb4e6b">z_ens</a> = np.tile(z,(self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a2a903a1d70e0c5d8a38c15a3e976a3d3">n_ens</a>,1))
<a name="l01473"></a>01473         
<a name="l01474"></a>01474         <span class="comment">#mid depth of the layers</span>
<a name="l01475"></a>01475         depth = np.zeros(no_layer+1)
<a name="l01476"></a>01476         depth[1:] = np.cumsum(z)
<a name="l01477"></a>01477         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a7bee99e76ddebd5474e8ac05e2a31484">mid_z</a> = 0.5*(depth[1:]+depth[:-1])
<a name="l01478"></a>01478     
<a name="l01479"></a>01479     <span class="keyword">def </span>_enkf_par(self):
<a name="l01480"></a>01480         <span class="stringliteral">&quot;&quot;&quot;</span>
<a name="l01481"></a><a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a13482a4c981e20324a54d1c22595e6fe">01481</a> <span class="stringliteral">        ensemble kalman filter</span>
<a name="l01482"></a>01482 <span class="stringliteral">        &quot;&quot;&quot;</span>
<a name="l01483"></a>01483         <span class="comment"># make the state vector which contains the soil moisture at different </span>
<a name="l01484"></a>01484         <span class="comment">#depths and soil parameters</span>
<a name="l01485"></a>01485         x = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#ab6bee74b491c69096614664515497199">sm_ens</a> + 0.005*np.random.normal(size=self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a7700d8f689b1796fa34e490e5b16753d">no_layer</a>)
<a name="l01486"></a>01486         qr = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#aa47a178931262b4026d9322d4f567436">soil_par_ens</a>[<span class="stringliteral">&#39;qr&#39;</span>]
<a name="l01487"></a>01487         f = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#aa47a178931262b4026d9322d4f567436">soil_par_ens</a>[<span class="stringliteral">&#39;f&#39;</span>]
<a name="l01488"></a>01488         a = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#aa47a178931262b4026d9322d4f567436">soil_par_ens</a>[<span class="stringliteral">&#39;a&#39;</span>]
<a name="l01489"></a>01489         n = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#aa47a178931262b4026d9322d4f567436">soil_par_ens</a>[<span class="stringliteral">&#39;n&#39;</span>]
<a name="l01490"></a>01490         Ks = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#aa47a178931262b4026d9322d4f567436">soil_par_ens</a>[<span class="stringliteral">&#39;Ks&#39;</span>]
<a name="l01491"></a>01491         l = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#aa47a178931262b4026d9322d4f567436">soil_par_ens</a>[<span class="stringliteral">&#39;l&#39;</span>]
<a name="l01492"></a>01492         soil_par = (np.vstack([qr, f, a, n, Ks, l])).T
<a name="l01493"></a>01493         X = np.hstack([x, soil_par])
<a name="l01494"></a>01494         
<a name="l01495"></a>01495         <span class="comment"># compute the covariance matrix of the state+par</span>
<a name="l01496"></a>01496         X_bar = np.tile(X.mean(axis=0),(10,1))
<a name="l01497"></a>01497         X_X_bar = X-X_bar
<a name="l01498"></a>01498         cov_XX = np.dot(X_X_bar.T,X_X_bar) + 1e-6*np.eye(self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a7700d8f689b1796fa34e490e5b16753d">no_layer</a>+6)
<a name="l01499"></a>01499         cov_XX = 0.5*(cov_XX + cov_XX.T)
<a name="l01500"></a>01500         
<a name="l01501"></a>01501         <span class="comment"># get the measurement of the ssm at the current time</span>
<a name="l01502"></a>01502         <span class="comment"># and generate its ensemble and compute its covariance matrix</span>
<a name="l01503"></a>01503         e = np.zeros((self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a2a903a1d70e0c5d8a38c15a3e976a3d3">n_ens</a>, self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a7700d8f689b1796fa34e490e5b16753d">no_layer</a>+6))
<a name="l01504"></a>01504         <span class="keywordflow">if</span> np.isnan(self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a11d67e017885ceabb3460d702eb35aa8">meas_sm_mean</a>[self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a2e276ede84b8117f170836a18bff3d62" title="run the model ########################">t</a>-1]):
<a name="l01505"></a>01505             e[:,0] = 0
<a name="l01506"></a>01506             v = 0.01*np.random.normal(size=(self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a2a903a1d70e0c5d8a38c15a3e976a3d3">n_ens</a>,self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a7700d8f689b1796fa34e490e5b16753d">no_layer</a>+6))
<a name="l01507"></a>01507         <span class="keywordflow">else</span>:
<a name="l01508"></a>01508             e[:,0] = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a11d67e017885ceabb3460d702eb35aa8">meas_sm_mean</a>[self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a2e276ede84b8117f170836a18bff3d62" title="run the model ########################">t</a>-1] - self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#ab6bee74b491c69096614664515497199">sm_ens</a>[:,0].mean()
<a name="l01509"></a>01509             v = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a13c9d95ed504240ef3b448e472ecf1f8">meas_sm_std</a>[self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a2e276ede84b8117f170836a18bff3d62" title="run the model ########################">t</a>-1]*np.random.normal(size=(self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a2a903a1d70e0c5d8a38c15a3e976a3d3">n_ens</a>,self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a7700d8f689b1796fa34e490e5b16753d">no_layer</a>+6))
<a name="l01510"></a>01510             
<a name="l01511"></a>01511         v = v-np.tile(v.mean(axis=0),(self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a2a903a1d70e0c5d8a38c15a3e976a3d3">n_ens</a>,1))
<a name="l01512"></a>01512         ev = e + v
<a name="l01513"></a>01513         cov_ee = np.dot(ev.T, ev) + 1e-6*np.eye(self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a7700d8f689b1796fa34e490e5b16753d">no_layer</a>+6)
<a name="l01514"></a>01514         cov_ee = 0.5*(cov_ee + cov_ee.T)
<a name="l01515"></a>01515         
<a name="l01516"></a>01516         <span class="comment"># compute kalaman gain</span>
<a name="l01517"></a>01517         K = np.dot(cov_XX, np.linalg.pinv(cov_XX+cov_ee))
<a name="l01518"></a>01518         
<a name="l01519"></a>01519         <span class="comment"># update the measurment</span>
<a name="l01520"></a>01520         v = np.random.normal(size=(self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a2a903a1d70e0c5d8a38c15a3e976a3d3">n_ens</a>,))
<a name="l01521"></a>01521         v = v-v.mean()
<a name="l01522"></a>01522         e[:,0] = e[:,0]+0.005*v
<a name="l01523"></a>01523         K = 0.5*(K + K.T)
<a name="l01524"></a>01524         usm_par = X + np.dot(K,e.T).T      
<a name="l01525"></a>01525         temp = np.dot(K,e.T).T     
<a name="l01526"></a>01526         
<a name="l01527"></a>01527         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a13482a4c981e20324a54d1c22595e6fe">usm_par</a> = usm_par
<a name="l01528"></a>01528         <span class="comment">#if self.t&lt;=5:</span>
<a name="l01529"></a>01529         <span class="comment">#    print self.t, usm_par[:,self.no_layer+4]/soil_par[:,4]</span>
<a name="l01530"></a>01530         <span class="comment"># check for the range of the updated ensemble</span>
<a name="l01531"></a>01531         <span class="comment"># soil moisture</span>
<a name="l01532"></a>01532         sm_ens = usm_par[:,:self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a7700d8f689b1796fa34e490e5b16753d">no_layer</a>]
<a name="l01533"></a>01533         sm_ens[sm_ens&lt;0] = 0
<a name="l01534"></a>01534         sm_ens[sm_ens&gt;1] = 1
<a name="l01535"></a>01535         v = 0.001*np.random.normal(size=(sm_ens.shape))
<a name="l01536"></a>01536         v = v-np.tile(v.mean(axis=0),(self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a2a903a1d70e0c5d8a38c15a3e976a3d3">n_ens</a>,1))
<a name="l01537"></a>01537         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#ab6bee74b491c69096614664515497199">sm_ens</a> = sm_ens + v
<a name="l01538"></a>01538         <span class="comment"># soil parameters</span>
<a name="l01539"></a>01539         qr = usm_par[:,self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a7700d8f689b1796fa34e490e5b16753d">no_layer</a>+0]
<a name="l01540"></a>01540         f = usm_par[:,self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a7700d8f689b1796fa34e490e5b16753d">no_layer</a>+1]
<a name="l01541"></a>01541         a = usm_par[:,self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a7700d8f689b1796fa34e490e5b16753d">no_layer</a>+2]
<a name="l01542"></a>01542         n = usm_par[:,self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a7700d8f689b1796fa34e490e5b16753d">no_layer</a>+3]
<a name="l01543"></a>01543         Ks = usm_par[:,self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a7700d8f689b1796fa34e490e5b16753d">no_layer</a>+4]
<a name="l01544"></a>01544         l = usm_par[:,self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a7700d8f689b1796fa34e490e5b16753d">no_layer</a>+5]
<a name="l01545"></a>01545         
<a name="l01546"></a>01546         
<a name="l01547"></a>01547         qr[qr&gt;self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a74460781304be9b1a9e1091fe9ac8542">qr_max</a>] = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a74460781304be9b1a9e1091fe9ac8542">qr_max</a>
<a name="l01548"></a>01548         f[f&gt;self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a2bd0a9dada37b2589cbbfce6bdad34a3">f_max</a>] = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a2bd0a9dada37b2589cbbfce6bdad34a3">f_max</a>
<a name="l01549"></a>01549         a[a&gt;self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a266e05adb9a9eb932be1aa21cce0abd7">a_max</a>] = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a266e05adb9a9eb932be1aa21cce0abd7">a_max</a>
<a name="l01550"></a>01550         n[n&gt;self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#aeaa84b633b369cf4775bba57b80e4720">n_max</a>] = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#aeaa84b633b369cf4775bba57b80e4720">n_max</a>
<a name="l01551"></a>01551         Ks[Ks&gt;self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#ae4ccf5d8e2104971b4605834468b6fd1">Ks_max</a>] = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#ae4ccf5d8e2104971b4605834468b6fd1">Ks_max</a>
<a name="l01552"></a>01552         l[l&gt;self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a38302a6260964bcd1911079381d5e243">l_max</a>] = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a38302a6260964bcd1911079381d5e243">l_max</a>
<a name="l01553"></a>01553         
<a name="l01554"></a>01554         qr[qr&lt;self.qr_min]  = self.qr_min
<a name="l01555"></a>01555         f[f&lt;self.f_min]  = self.f_min
<a name="l01556"></a>01556         a[a&lt;self.a_min]     = self.a_min
<a name="l01557"></a>01557         n[n&lt;self.n_min]                 = self.n_min
<a name="l01558"></a>01558         Ks[Ks&lt;self.Ks_min]              = self.Ks_min
<a name="l01559"></a>01559         l[l&lt;self.l_min]                 = self.l_min
<a name="l01560"></a>01560         
<a name="l01561"></a>01561         
<a name="l01562"></a>01562         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#aa47a178931262b4026d9322d4f567436">soil_par_ens</a>[<span class="stringliteral">&#39;qr&#39;</span>] = qr
<a name="l01563"></a>01563         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#aa47a178931262b4026d9322d4f567436">soil_par_ens</a>[<span class="stringliteral">&#39;f&#39;</span>] = f
<a name="l01564"></a>01564         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#aa47a178931262b4026d9322d4f567436">soil_par_ens</a>[<span class="stringliteral">&#39;a&#39;</span>] = a
<a name="l01565"></a>01565         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#aa47a178931262b4026d9322d4f567436">soil_par_ens</a>[<span class="stringliteral">&#39;n&#39;</span>] = n
<a name="l01566"></a>01566         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#aa47a178931262b4026d9322d4f567436">soil_par_ens</a>[<span class="stringliteral">&#39;Ks&#39;</span>] = Ks
<a name="l01567"></a>01567         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#aa47a178931262b4026d9322d4f567436">soil_par_ens</a>[<span class="stringliteral">&#39;l&#39;</span>] = l
<a name="l01568"></a>01568         
<a name="l01569"></a>01569         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a13458670d08ea70070c85b0aafbb692f">K</a> = K
<a name="l01570"></a>01570         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a1a5f1a330a26d2b21b4b17ba400fe46f">cov_ee</a> = cov_ee
<a name="l01571"></a>01571         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a1d235ea4c09b7ab79f59e74360fc6364">cov_XX</a> = cov_XX
<a name="l01572"></a>01572     
<a name="l01573"></a>01573     <span class="keyword">def </span>_enkf_ET(self):
<a name="l01574"></a>01574         <span class="stringliteral">&quot;&quot;&quot;</span>
<a name="l01575"></a>01575 <span class="stringliteral">        ensemble kalman filter</span>
<a name="l01576"></a>01576 <span class="stringliteral">        &quot;&quot;&quot;</span>
<a name="l01577"></a>01577         <span class="comment"># make the state vector which contains the soil moisture at different </span>
<a name="l01578"></a>01578         <span class="comment">#depths and soil parameters</span>
<a name="l01579"></a>01579         x = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#ab6bee74b491c69096614664515497199">sm_ens</a> + 0.005*np.random.normal(size=self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a7700d8f689b1796fa34e490e5b16753d">no_layer</a>)
<a name="l01580"></a>01580         qr = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#aa47a178931262b4026d9322d4f567436">soil_par_ens</a>[<span class="stringliteral">&#39;qr&#39;</span>]
<a name="l01581"></a>01581         f = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#aa47a178931262b4026d9322d4f567436">soil_par_ens</a>[<span class="stringliteral">&#39;f&#39;</span>]
<a name="l01582"></a>01582         a = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#aa47a178931262b4026d9322d4f567436">soil_par_ens</a>[<span class="stringliteral">&#39;a&#39;</span>]
<a name="l01583"></a>01583         n = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#aa47a178931262b4026d9322d4f567436">soil_par_ens</a>[<span class="stringliteral">&#39;n&#39;</span>]
<a name="l01584"></a>01584         Ks = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#aa47a178931262b4026d9322d4f567436">soil_par_ens</a>[<span class="stringliteral">&#39;Ks&#39;</span>]
<a name="l01585"></a>01585         l = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#aa47a178931262b4026d9322d4f567436">soil_par_ens</a>[<span class="stringliteral">&#39;l&#39;</span>]
<a name="l01586"></a>01586         soil_par = (np.vstack([qr, f, a, n, Ks, l])).T
<a name="l01587"></a>01587         X = np.hstack([x, soil_par])
<a name="l01588"></a>01588         
<a name="l01589"></a>01589         <span class="comment"># compute the covariance matrix of the state+par</span>
<a name="l01590"></a>01590         X_bar = np.tile(X.mean(axis=0),(10,1))
<a name="l01591"></a>01591         X_X_bar = X-X_bar
<a name="l01592"></a>01592         cov_XX = np.dot(X_X_bar.T,X_X_bar) + 1e-6*np.eye(self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a7700d8f689b1796fa34e490e5b16753d">no_layer</a>+6)
<a name="l01593"></a>01593         cov_XX = 0.5*(cov_XX + cov_XX.T)
<a name="l01594"></a>01594         
<a name="l01595"></a>01595         <span class="comment"># get the measurement of the AET at the current time</span>
<a name="l01596"></a>01596         <span class="comment"># and use it to generate ensemble of soil moisture</span>
<a name="l01597"></a>01597         err_aet = np.zeros(self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a2a903a1d70e0c5d8a38c15a3e976a3d3">n_ens</a>)
<a name="l01598"></a>01598         <span class="keywordflow">for</span> ens <span class="keywordflow">in</span> range(self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a2a903a1d70e0c5d8a38c15a3e976a3d3">n_ens</a>):
<a name="l01599"></a>01599             self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#aca1e8b85661bf974043c2003b97bd658">ens</a> = ens
<a name="l01600"></a>01600             self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a9d457a074e4543564513c7137887264b">_smi_fun</a>()
<a name="l01601"></a>01601             AE = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a6f2de34d3463ef8027bc9a46d1da3a38">evap</a>*self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#ad0cf7e96813700528dded88499688283">SSMI</a>
<a name="l01602"></a>01602             self._transpiration_fun()
<a name="l01603"></a>01603             AT = self.AT 
<a name="l01604"></a>01604             
<a name="l01605"></a>01605             err_aet[ens] = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a55ea73de38f065d21268d76c4abc15a0">meas_aet</a>[self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a2e276ede84b8117f170836a18bff3d62" title="run the model ########################">t</a>] - AE - AT.sum() - self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a8ee1df4c27b7f01c7961a30c02fd6421">E_In</a>
<a name="l01606"></a>01606         err_ae = err_aet.mean()*AE/(AE+AT.sum())
<a name="l01607"></a>01607         err_at = err_aet.mean()*AT.sum()/(AE+AT.sum())
<a name="l01608"></a>01608         
<a name="l01609"></a>01609         e = np.zeros((self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a2a903a1d70e0c5d8a38c15a3e976a3d3">n_ens</a>, self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a7700d8f689b1796fa34e490e5b16753d">no_layer</a>+6))
<a name="l01610"></a>01610         e[:,0] = (err_ae + err_at*self.r_density[0])/self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#ab38281ca276abcbc9b5faa41207c024c">z</a>[0]
<a name="l01611"></a>01611         e[:,1] = err_at*self.r_density[1]/self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#ab38281ca276abcbc9b5faa41207c024c">z</a>[1]
<a name="l01612"></a>01612         e[:,2] = err_at*self.r_density[2]/self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#ab38281ca276abcbc9b5faa41207c024c">z</a>[2]
<a name="l01613"></a>01613         e[:,3] = err_at*self.r_density[3]/self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#ab38281ca276abcbc9b5faa41207c024c">z</a>[3]
<a name="l01614"></a>01614         e[:,4] = err_at*self.r_density[4]/self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#ab38281ca276abcbc9b5faa41207c024c">z</a>[4]
<a name="l01615"></a>01615         v = 0.03*np.random.normal(size=(self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a2a903a1d70e0c5d8a38c15a3e976a3d3">n_ens</a>,self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a7700d8f689b1796fa34e490e5b16753d">no_layer</a>+6))
<a name="l01616"></a>01616             
<a name="l01617"></a>01617         v = v-np.tile(v.mean(axis=0),(self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a2a903a1d70e0c5d8a38c15a3e976a3d3">n_ens</a>,1))
<a name="l01618"></a>01618         ev = e + v
<a name="l01619"></a>01619         cov_ee = np.dot(ev.T, ev) + 1e-6*np.eye(self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a7700d8f689b1796fa34e490e5b16753d">no_layer</a>+6)
<a name="l01620"></a>01620         cov_ee = 0.5*(cov_ee + cov_ee.T)
<a name="l01621"></a>01621         
<a name="l01622"></a>01622         <span class="comment">#print cov_ee</span>
<a name="l01623"></a>01623         <span class="keywordflow">print</span> self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a2e276ede84b8117f170836a18bff3d62" title="run the model ########################">t</a>, e.max(), self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#ab38281ca276abcbc9b5faa41207c024c">z</a>[4]
<a name="l01624"></a>01624         <span class="comment"># compute kalaman gain</span>
<a name="l01625"></a>01625         K = np.dot(cov_XX, np.linalg.pinv(cov_XX+cov_ee))
<a name="l01626"></a>01626         
<a name="l01627"></a>01627         <span class="comment"># update the measurment</span>
<a name="l01628"></a>01628         v = np.random.normal(size=(self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a2a903a1d70e0c5d8a38c15a3e976a3d3">n_ens</a>,))
<a name="l01629"></a>01629         v = v-v.mean()
<a name="l01630"></a>01630         e[:,0] = e[:,0]+0.005*v
<a name="l01631"></a>01631         K = 0.5*(K + K.T)
<a name="l01632"></a>01632         usm_par = X + np.dot(K,e.T).T      
<a name="l01633"></a>01633         temp = np.dot(K,e.T).T     
<a name="l01634"></a>01634         
<a name="l01635"></a>01635         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a13482a4c981e20324a54d1c22595e6fe">usm_par</a> = usm_par
<a name="l01636"></a>01636         <span class="comment">#if self.t&lt;=5:</span>
<a name="l01637"></a>01637         <span class="comment">#    print self.t, usm_par[:,self.no_layer+4]/soil_par[:,4]</span>
<a name="l01638"></a>01638         <span class="comment"># check for the range of the updated ensemble</span>
<a name="l01639"></a>01639         <span class="comment"># soil moisture</span>
<a name="l01640"></a>01640         sm_ens = usm_par[:,:self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a7700d8f689b1796fa34e490e5b16753d">no_layer</a>]
<a name="l01641"></a>01641         sm_ens[sm_ens&lt;0] = 0
<a name="l01642"></a>01642         sm_ens[sm_ens&gt;1] = 1
<a name="l01643"></a>01643         v = 0.001*np.random.normal(size=(sm_ens.shape))
<a name="l01644"></a>01644         v = v-np.tile(v.mean(axis=0),(self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a2a903a1d70e0c5d8a38c15a3e976a3d3">n_ens</a>,1))
<a name="l01645"></a>01645         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#ab6bee74b491c69096614664515497199">sm_ens</a> = sm_ens + v
<a name="l01646"></a>01646         <span class="comment"># soil parameters</span>
<a name="l01647"></a>01647         qr = usm_par[:,self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a7700d8f689b1796fa34e490e5b16753d">no_layer</a>+0]
<a name="l01648"></a>01648         f = usm_par[:,self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a7700d8f689b1796fa34e490e5b16753d">no_layer</a>+1]
<a name="l01649"></a>01649         a = usm_par[:,self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a7700d8f689b1796fa34e490e5b16753d">no_layer</a>+2]
<a name="l01650"></a>01650         n = usm_par[:,self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a7700d8f689b1796fa34e490e5b16753d">no_layer</a>+3]
<a name="l01651"></a>01651         Ks = usm_par[:,self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a7700d8f689b1796fa34e490e5b16753d">no_layer</a>+4]
<a name="l01652"></a>01652         l = usm_par[:,self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a7700d8f689b1796fa34e490e5b16753d">no_layer</a>+5]
<a name="l01653"></a>01653         
<a name="l01654"></a>01654         
<a name="l01655"></a>01655         qr[qr&gt;self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a74460781304be9b1a9e1091fe9ac8542">qr_max</a>] = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a74460781304be9b1a9e1091fe9ac8542">qr_max</a>
<a name="l01656"></a>01656         f[f&gt;self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a2bd0a9dada37b2589cbbfce6bdad34a3">f_max</a>] = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a2bd0a9dada37b2589cbbfce6bdad34a3">f_max</a>
<a name="l01657"></a>01657         a[a&gt;self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a266e05adb9a9eb932be1aa21cce0abd7">a_max</a>] = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a266e05adb9a9eb932be1aa21cce0abd7">a_max</a>
<a name="l01658"></a>01658         n[n&gt;self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#aeaa84b633b369cf4775bba57b80e4720">n_max</a>] = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#aeaa84b633b369cf4775bba57b80e4720">n_max</a>
<a name="l01659"></a>01659         Ks[Ks&gt;self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#ae4ccf5d8e2104971b4605834468b6fd1">Ks_max</a>] = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#ae4ccf5d8e2104971b4605834468b6fd1">Ks_max</a>
<a name="l01660"></a>01660         l[l&gt;self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a38302a6260964bcd1911079381d5e243">l_max</a>] = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a38302a6260964bcd1911079381d5e243">l_max</a>
<a name="l01661"></a>01661         
<a name="l01662"></a>01662         qr[qr&lt;self.qr_min]  = self.qr_min
<a name="l01663"></a>01663         f[f&lt;self.f_min]  = self.f_min
<a name="l01664"></a>01664         a[a&lt;self.a_min]     = self.a_min
<a name="l01665"></a>01665         n[n&lt;self.n_min]                 = self.n_min
<a name="l01666"></a>01666         Ks[Ks&lt;self.Ks_min]              = self.Ks_min
<a name="l01667"></a>01667         l[l&lt;self.l_min]                 = self.l_min
<a name="l01668"></a>01668         
<a name="l01669"></a>01669         
<a name="l01670"></a>01670         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#aa47a178931262b4026d9322d4f567436">soil_par_ens</a>[<span class="stringliteral">&#39;qr&#39;</span>] = qr
<a name="l01671"></a>01671         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#aa47a178931262b4026d9322d4f567436">soil_par_ens</a>[<span class="stringliteral">&#39;f&#39;</span>] = f
<a name="l01672"></a>01672         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#aa47a178931262b4026d9322d4f567436">soil_par_ens</a>[<span class="stringliteral">&#39;a&#39;</span>] = a
<a name="l01673"></a>01673         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#aa47a178931262b4026d9322d4f567436">soil_par_ens</a>[<span class="stringliteral">&#39;n&#39;</span>] = n
<a name="l01674"></a>01674         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#aa47a178931262b4026d9322d4f567436">soil_par_ens</a>[<span class="stringliteral">&#39;Ks&#39;</span>] = Ks
<a name="l01675"></a>01675         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#aa47a178931262b4026d9322d4f567436">soil_par_ens</a>[<span class="stringliteral">&#39;l&#39;</span>] = l
<a name="l01676"></a>01676         
<a name="l01677"></a>01677         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a13458670d08ea70070c85b0aafbb692f">K</a> = K
<a name="l01678"></a>01678         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a1a5f1a330a26d2b21b4b17ba400fe46f">cov_ee</a> = cov_ee
<a name="l01679"></a>01679         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a1d235ea4c09b7ab79f59e74360fc6364">cov_XX</a> = cov_XX
<a name="l01680"></a>01680 
<a name="l01681"></a>01681     <span class="keyword">def </span>_read_forcing(self):
<a name="l01682"></a>01682         <span class="stringliteral">&quot;&quot;&quot;</span>
<a name="l01683"></a><a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#af8d31778ac813928c9fc60ea1d2d6110">01683</a> <span class="stringliteral">        read the forcing data from xls file</span>
<a name="l01684"></a>01684 <span class="stringliteral">        &quot;&quot;&quot;</span>
<a name="l01685"></a>01685         book = xlrd.open_workbook(self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a98d023b5ac919bd04b192860be82aa4b">input_file</a>)
<a name="l01686"></a>01686         sheet = book.sheet_by_name(<span class="stringliteral">&#39;forcing&#39;</span>)
<a name="l01687"></a>01687         
<a name="l01688"></a>01688         data_len = sheet.nrows-1
<a name="l01689"></a>01689         year = np.zeros(data_len)
<a name="l01690"></a>01690         doy = np.zeros(data_len)
<a name="l01691"></a>01691         rain = np.zeros(data_len)
<a name="l01692"></a>01692         pet = np.zeros(data_len)
<a name="l01693"></a>01693         ndvi = np.zeros(data_len)
<a name="l01694"></a>01694         pumping = np.zeros(data_len)
<a name="l01695"></a>01695         meas_sm_mean = np.zeros(data_len)
<a name="l01696"></a>01696         meas_sm_std = np.zeros(data_len)
<a name="l01697"></a>01697         meas_aet = np.zeros(data_len)
<a name="l01698"></a>01698     
<a name="l01699"></a>01699         <span class="keywordflow">for</span> i <span class="keywordflow">in</span> xrange(data_len):
<a name="l01700"></a>01700             year[i] = sheet.cell_value(i+1,0)
<a name="l01701"></a>01701             doy[i] = sheet.cell_value(i+1,1)
<a name="l01702"></a>01702             rain[i] = sheet.cell_value(i+1,2)
<a name="l01703"></a>01703             pet[i] = sheet.cell_value(i+1,3)
<a name="l01704"></a>01704             ndvi[i] = sheet.cell_value(i+1,4)
<a name="l01705"></a>01705             pumping[i] = sheet.cell_value(i+1,5)
<a name="l01706"></a>01706             meas_sm_mean[i] = sheet.cell_value(i+1,6)
<a name="l01707"></a>01707             meas_sm_std[i] = sheet.cell_value(i+1,7)
<a name="l01708"></a>01708             meas_aet[i] = sheet.cell_value(i+1,8)/1000.0
<a name="l01709"></a>01709         
<a name="l01710"></a>01710         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#af8d31778ac813928c9fc60ea1d2d6110">year</a> = year
<a name="l01711"></a>01711         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a5c00013526fa5c279a962829e14acd64">doy</a> = doy
<a name="l01712"></a>01712         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a11d67e017885ceabb3460d702eb35aa8">meas_sm_mean</a> = meas_sm_mean
<a name="l01713"></a>01713         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a13c9d95ed504240ef3b448e472ecf1f8">meas_sm_std</a> = meas_sm_std
<a name="l01714"></a>01714         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a55ea73de38f065d21268d76c4abc15a0">meas_aet</a> = meas_aet
<a name="l01715"></a>01715         
<a name="l01716"></a>01716         <span class="comment"># if forcing data was in mm units, covert into m</span>
<a name="l01717"></a>01717         <span class="keywordflow">if</span> self.forcing_units[<span class="stringliteral">&#39;rain&#39;</span>] == <span class="stringliteral">&#39;mm&#39;</span>:
<a name="l01718"></a>01718             self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#ab04e7fa90c8706e903069241fda0c56c">rain</a> = rain/1000.0
<a name="l01719"></a>01719         <span class="keywordflow">elif</span> self.forcing_units[<span class="stringliteral">&#39;rain&#39;</span>] == <span class="stringliteral">&#39;m&#39;</span>:
<a name="l01720"></a>01720             self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#ab04e7fa90c8706e903069241fda0c56c">rain</a> = rain
<a name="l01721"></a>01721         <span class="keywordflow">else</span>:
<a name="l01722"></a>01722             <span class="keywordflow">raise</span> ValueError(<span class="stringliteral">&quot;The units of rain should be either &#39;mm&#39; or &#39;m&#39; &quot;</span>)
<a name="l01723"></a>01723 
<a name="l01724"></a>01724         <span class="keywordflow">if</span> self.forcing_units[<span class="stringliteral">&#39;pet&#39;</span>] == <span class="stringliteral">&#39;mm&#39;</span>:
<a name="l01725"></a>01725             self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#ac6f66b8583015ccff21bc7ce4d30f070">pet</a> = pet/1000.0
<a name="l01726"></a>01726         <span class="keywordflow">elif</span> self.forcing_units[<span class="stringliteral">&#39;pet&#39;</span>] == <span class="stringliteral">&#39;m&#39;</span>:
<a name="l01727"></a>01727             self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#ac6f66b8583015ccff21bc7ce4d30f070">pet</a> = pet
<a name="l01728"></a>01728         <span class="keywordflow">else</span>:
<a name="l01729"></a>01729             <span class="keywordflow">raise</span> ValueError(<span class="stringliteral">&quot;The units of PET should be either &#39;mm&#39; or &#39;m&#39; &quot;</span>)
<a name="l01730"></a>01730             
<a name="l01731"></a>01731         <span class="keywordflow">if</span> self.forcing_units[<span class="stringliteral">&#39;pumping&#39;</span>] == <span class="stringliteral">&#39;mm&#39;</span>:
<a name="l01732"></a>01732             self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a5881af6548373b1604223ed6ba689e96">pumping</a> = pumping/1000.0
<a name="l01733"></a>01733         <span class="keywordflow">elif</span> self.forcing_units[<span class="stringliteral">&#39;pumping&#39;</span>] == <span class="stringliteral">&#39;m&#39;</span>:
<a name="l01734"></a>01734             self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a5881af6548373b1604223ed6ba689e96">pumping</a> = pumping
<a name="l01735"></a>01735         <span class="keywordflow">else</span>:
<a name="l01736"></a>01736             <span class="keywordflow">raise</span> ValueError(<span class="stringliteral">&quot;The units of pumping should be either &#39;mm&#39; or &#39;m&#39; &quot;</span>)
<a name="l01737"></a>01737         
<a name="l01738"></a>01738         <span class="comment"># compute the fractional vegetation cover, rooting depth and lai</span>
<a name="l01739"></a>01739         ndvi_max = self.ndvi_max
<a name="l01740"></a>01740         ndvi_min = self.ndvi_min
<a name="l01741"></a>01741         ndvi[ndvi&gt;ndvi_max] = ndvi_max
<a name="l01742"></a>01742         ndvi[ndvi&lt;ndvi_min] = ndvi_min
<a name="l01743"></a>01743         
<a name="l01744"></a>01744         fapar = 1.60*ndvi-0.02
<a name="l01745"></a>01745         fapar_max = self.fapar_max
<a name="l01746"></a>01746         
<a name="l01747"></a>01747         lai_max = self.lai_max
<a name="l01748"></a>01748         lai = lai_max*np.log(1-fapar)/np.log(1-fapar_max)
<a name="l01749"></a>01749         
<a name="l01750"></a>01750         Rd_max = self.Rd_max  
<a name="l01751"></a>01751         Rd = Rd_max*lai/lai_max
<a name="l01752"></a>01752         fc = ((ndvi-ndvi_max)/(ndvi_max-ndvi_min))**2
<a name="l01753"></a>01753         
<a name="l01754"></a>01754         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#af231f03a50416dc8fe791a063d0c0bb0">kc</a> = 0.8+0.4*(1-np.exp(-0.7*lai))
<a name="l01755"></a>01755         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#aedc31f1f3a18c0bd6790603c2cb091b5">ndvi</a> = ndvi
<a name="l01756"></a>01756         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a813ed5ac2ab93547a386e30c34a99971">lai</a> = lai        
<a name="l01757"></a>01757         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a2db114106f5ffe7392a77d09a492d024">Rd</a> = Rd
<a name="l01758"></a>01758         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#ae523a0c85b1039226a8cdb0aa0a4f3d6">fc</a> = fc
<a name="l01759"></a>01759 
<a name="l01760"></a>01760     <span class="keyword">def </span>_write_output(self):
<a name="l01761"></a>01761         <span class="stringliteral">&quot;&quot;&quot;</span>
<a name="l01762"></a>01762 <span class="stringliteral">        this functions writes the output at each time step</span>
<a name="l01763"></a>01763 <span class="stringliteral">        &quot;&quot;&quot;</span>
<a name="l01764"></a>01764         <span class="comment"># write the output</span>
<a name="l01765"></a>01765         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a0cb50e5203ec570c5f7c5d12bb12c71c">nc_year</a>[self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a2e276ede84b8117f170836a18bff3d62" title="run the model ########################">t</a>] = (self.cur_year)
<a name="l01766"></a>01766         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a5cada20c173c8735df488f79ef181f8c">nc_doy</a>[self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a2e276ede84b8117f170836a18bff3d62" title="run the model ########################">t</a>] = (self.cur_doy)
<a name="l01767"></a>01767         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a3406312c789fc4adee65cc46fe6003c3">nc_sm</a>[:,:,self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a2e276ede84b8117f170836a18bff3d62" title="run the model ########################">t</a>+1] = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#ab6bee74b491c69096614664515497199">sm_ens</a>
<a name="l01768"></a>01768         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a2b57e60b15e4323ddd1c4cbf857a15d5">nc_gw_level_ens</a>[:,self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a2e276ede84b8117f170836a18bff3d62" title="run the model ########################">t</a>+1] = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a66efa37befe06bcf214daec41aec38da">gw_level_ens</a>[:,self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a2e276ede84b8117f170836a18bff3d62" title="run the model ########################">t</a>+1]
<a name="l01769"></a>01769         <span class="comment">#self.nc_recharge[self.t] = recharge_day</span>
<a name="l01770"></a>01770         <span class="comment">#self.nc_aet[self.t] = aet_day</span>
<a name="l01771"></a>01771         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a12203c67c9a8aa953a1ad100ede8abac">nc_qr</a>[:,self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a2e276ede84b8117f170836a18bff3d62" title="run the model ########################">t</a>] = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#aa47a178931262b4026d9322d4f567436">soil_par_ens</a>[<span class="stringliteral">&#39;qr&#39;</span>]
<a name="l01772"></a>01772         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a08eb4f220a016618bef416cc0b3f8246">nc_f</a>[:,self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a2e276ede84b8117f170836a18bff3d62" title="run the model ########################">t</a>] = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#aa47a178931262b4026d9322d4f567436">soil_par_ens</a>[<span class="stringliteral">&#39;f&#39;</span>]
<a name="l01773"></a>01773         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a9368f37ca29640732331c236e735c69e">nc_a</a>[:,self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a2e276ede84b8117f170836a18bff3d62" title="run the model ########################">t</a>] = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#aa47a178931262b4026d9322d4f567436">soil_par_ens</a>[<span class="stringliteral">&#39;a&#39;</span>]
<a name="l01774"></a>01774         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a4998f7fd52fa1630bbd23b3688ca1198">nc_n</a>[:,self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a2e276ede84b8117f170836a18bff3d62" title="run the model ########################">t</a>] = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#aa47a178931262b4026d9322d4f567436">soil_par_ens</a>[<span class="stringliteral">&#39;n&#39;</span>]
<a name="l01775"></a>01775         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a00c481fab192e15241bcb3db90ea76b3">nc_Ks</a>[:,self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a2e276ede84b8117f170836a18bff3d62" title="run the model ########################">t</a>] = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#aa47a178931262b4026d9322d4f567436">soil_par_ens</a>[<span class="stringliteral">&#39;Ks&#39;</span>]
<a name="l01776"></a>01776         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a6f043d6e8e1a5f4d1d65088ce8a477be">nc_l</a>[:,self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a2e276ede84b8117f170836a18bff3d62" title="run the model ########################">t</a>] = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#aa47a178931262b4026d9322d4f567436">soil_par_ens</a>[<span class="stringliteral">&#39;l&#39;</span>]
<a name="l01777"></a>01777         <span class="comment">#self.nc_recharge[:,self.t] = self.recharge</span>
<a name="l01778"></a>01778     
<a name="l01779"></a>01779     <span class="keyword">def </span>_shp(self, theta,i):
<a name="l01780"></a>01780         <span class="stringliteral">&quot;&quot;&quot;</span>
<a name="l01781"></a>01781 <span class="stringliteral">        soil hydraulic properties module</span>
<a name="l01782"></a>01782 <span class="stringliteral">        i is the layer</span>
<a name="l01783"></a>01783 <span class="stringliteral">        &quot;&quot;&quot;</span>
<a name="l01784"></a>01784         ens = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#aca1e8b85661bf974043c2003b97bd658">ens</a>
<a name="l01785"></a>01785         qr = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#aa47a178931262b4026d9322d4f567436">soil_par_ens</a>[<span class="stringliteral">&#39;qr&#39;</span>][ens]*np.exp(-self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a7bee99e76ddebd5474e8ac05e2a31484">mid_z</a>[i]/self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#af81ae7a5cd5fe5ce64a3fb356b3a3827">shp_ens</a>[<span class="stringliteral">&#39;fl&#39;</span>])
<a name="l01786"></a>01786         f = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#aa47a178931262b4026d9322d4f567436">soil_par_ens</a>[<span class="stringliteral">&#39;f&#39;</span>][ens]*np.exp(-self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a7bee99e76ddebd5474e8ac05e2a31484">mid_z</a>[i]/self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#af81ae7a5cd5fe5ce64a3fb356b3a3827">shp_ens</a>[<span class="stringliteral">&#39;fl&#39;</span>])
<a name="l01787"></a>01787         a = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#aa47a178931262b4026d9322d4f567436">soil_par_ens</a>[<span class="stringliteral">&#39;a&#39;</span>][ens]
<a name="l01788"></a>01788         n = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#aa47a178931262b4026d9322d4f567436">soil_par_ens</a>[<span class="stringliteral">&#39;n&#39;</span>][ens]
<a name="l01789"></a>01789         Ks = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#aa47a178931262b4026d9322d4f567436">soil_par_ens</a>[<span class="stringliteral">&#39;Ks&#39;</span>][ens]
<a name="l01790"></a>01790         l = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#aa47a178931262b4026d9322d4f567436">soil_par_ens</a>[<span class="stringliteral">&#39;l&#39;</span>][ens]
<a name="l01791"></a>01791         
<a name="l01792"></a>01792         m = 1-1/n
<a name="l01793"></a>01793         Se = (theta-qr)/(f - qr)
<a name="l01794"></a>01794         <span class="keywordflow">if</span> Se&gt;=0.99:
<a name="l01795"></a>01795             Se = 0.99
<a name="l01796"></a>01796         <span class="keywordflow">elif</span> Se&lt;=0.01:
<a name="l01797"></a>01797             Se = 0.01
<a name="l01798"></a>01798         K = Ks*Se**l*(1-(1-Se**(1/m))**m)**2
<a name="l01799"></a>01799         D = K/(a*(f-qr)*m*n*(Se**(1/m+1))*(Se**(-1/m)-1)**m)
<a name="l01800"></a>01800         <span class="keywordflow">return</span> K, D
<a name="l01801"></a>01801 
<a name="l01802"></a>01802     <span class="keyword">def </span>_read_ET_par(self):
<a name="l01803"></a>01803         <span class="stringliteral">&quot;&quot;&quot;</span>
<a name="l01804"></a>01804 <span class="stringliteral">        read the parameters related to evaporation</span>
<a name="l01805"></a>01805 <span class="stringliteral">        &quot;&quot;&quot;</span>
<a name="l01806"></a>01806         <span class="comment">#get the row number from the ind</span>
<a name="l01807"></a>01807         <span class="comment">#j = self.ind[&#39;ET_par&#39;]</span>
<a name="l01808"></a>01808         
<a name="l01809"></a>01809         <span class="comment">#book = xlrd.open_workbook(self.input_file)</span>
<a name="l01810"></a>01810         <span class="comment">#sheet = book.sheet_by_name(&#39;ET_par&#39;)</span>
<a name="l01811"></a>01811         ET_par = {}
<a name="l01812"></a>01812         <span class="comment">#ET_par[&#39;trans_fc&#39;] = sheet.cell_value(j,1)</span>
<a name="l01813"></a>01813         <span class="comment">#ET_par[&#39;trans_wp&#39;] = sheet.cell_value(j,2)</span>
<a name="l01814"></a>01814         qr = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#af81ae7a5cd5fe5ce64a3fb356b3a3827">shp_ens</a>[<span class="stringliteral">&#39;qr&#39;</span>]
<a name="l01815"></a>01815         f = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#af81ae7a5cd5fe5ce64a3fb356b3a3827">shp_ens</a>[<span class="stringliteral">&#39;f&#39;</span>]
<a name="l01816"></a>01816         a = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#af81ae7a5cd5fe5ce64a3fb356b3a3827">shp_ens</a>[<span class="stringliteral">&#39;a&#39;</span>]
<a name="l01817"></a>01817         n = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#af81ae7a5cd5fe5ce64a3fb356b3a3827">shp_ens</a>[<span class="stringliteral">&#39;n&#39;</span>]
<a name="l01818"></a>01818         m = 1-1/n
<a name="l01819"></a>01819         fl = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#af81ae7a5cd5fe5ce64a3fb356b3a3827">shp_ens</a>[<span class="stringliteral">&#39;fl&#39;</span>]
<a name="l01820"></a>01820         mid_z = self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#a7bee99e76ddebd5474e8ac05e2a31484">mid_z</a>
<a name="l01821"></a>01821         ET_par[<span class="stringliteral">&#39;trans_fc&#39;</span>] = self.psi2theta(-0.33, qr, f, a, m, n)*np.exp(-mid_z/fl)
<a name="l01822"></a>01822         ET_par[<span class="stringliteral">&#39;trans_wp&#39;</span>] = self.psi2theta(-15, qr, f, a, m, n)*np.exp(-mid_z/fl)
<a name="l01823"></a>01823         
<a name="l01824"></a>01824         self.<a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html#ad8d0c59c4df8692617eb91fd3d426ec4">ET_par</a> = ET_par
<a name="l01825"></a>01825 
<a name="l01826"></a>01826 <span class="keywordflow">if</span> __name__==<span class="stringliteral">&#39;__main__&#39;</span>:
<a name="l01827"></a>01827     <span class="comment">#berambadi = CSGLM(&#39;/home/tomer/csglm/input/berambadi.xls&#39;)</span>
<a name="l01828"></a>01828     
<a name="l01829"></a><a class="code" href="namespaceambhas_1_1csglm.html#a673736b1205fb6d3b9759c115af35376">01829</a>     berambadi_enkf = <a class="code" href="classambhas_1_1csglm_1_1CSGLM__ENKF.html">CSGLM_ENKF</a>(<span class="stringliteral">&#39;/home/tomer/csglm/input/berambadi_enkf.xls&#39;</span>)
<a name="l01830"></a>01830     
<a name="l01831"></a>01831 <span class="comment">#    plt.plot(berambadi.gw_level)</span>
<a name="l01832"></a>01832 <span class="comment">#    plt.show()</span>
<a name="l01833"></a>01833 
<a name="l01834"></a>01834 
<a name="l01835"></a>01835        
<a name="l01836"></a>01836         
<a name="l01837"></a>01837 
<a name="l01838"></a>01838         
<a name="l01839"></a>01839 
<a name="l01840"></a>01840         
</pre></div></div><!-- contents -->
</div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Variables</a></div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

  <div id="nav-path" class="navpath">
    <ul>
      <li class="navelem"><a class="el" href="csglm_8py.html">csglm.py</a>      </li>

    <li class="footer">Generated on Sat Jul 21 2012 12:26:08 for AMBHAS by
    <a href="http://www.doxygen.org/index.html">
    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.6.1 </li>
   </ul>
 </div>


</body>
</html>
